Siento que esto tiene que estar enterrado en algún lugar de la documentación, pero no puedo encontrarlo.
¿Cómo se cierra, finaliza o elimina (lo que sea) una sesión en ExpressJS?
El manejo de sesiones ya no está integrado en Express. Esta respuesta se refiere al módulo de sesión estándar: https://github.com/expressjs/session
Para borrar los datos de la sesión, simplemente use:
req.session.destroy();
La documentación es un poco inútil al respecto. Dice:
Destruye la sesión, eliminando req.session, se volverá a generar la próxima solicitud.
req.session.destroy(function(err) { // cannot access session here })
Esto no significa que la sesión actual se volverá a cargar en la próxima solicitud. Significa que se creará una sesión limpia y vacía en su tienda de sesiones en la próxima solicitud. (Es de suponer que el ID de la sesión no cambia, pero no lo he probado).
No importa, es
req.session.destroy();
fuente
req.session.destroy();
como lo hizo acidghost.La pregunta no aclaró qué tipo de tienda de sesiones se estaba utilizando. Ambas respuestas parecen ser correctas.
Para sesiones basadas en cookies:
De http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
Para sesiones basadas en Redis, etc.
req.session.destroy // Deletes the session in the database.
fuente
De http://expressjs.com/api.html#cookieSession
Para borrar una cookie, simplemente asigne la sesión a nula antes de responder:
req.session = null
fuente
utilizar,
delete req.session.yoursessionname;
fuente
Usar
req.session = null;
, en realidad no eliminará la instancia de sesión. La solución más adecuada seríareq.session.destroy();
, pero esto es esencialmente una envoltura paradelete req.session;
.https://github.com/expressjs/session/blob/master/session/session.js
Session.prototype.destroy = function(fn){ delete this.req.session; this.req.sessionStore.destroy(this.id, fn); return this; };
fuente
Session.destroy (devolución de llamada)
↓ Forma segura ↓ ✅
req.session.destroy((err) => { res.redirect('/') // will always fire after session is destroyed })
↓ Camino inseguro ↓ ❌
req.logout(); res.redirect('/') // can be called before logout is done
fuente
Lo anterior no funcionó para mí, así que hice esto.
req.session.cookie.expires = new Date().getTime();
Al establecer el vencimiento de la cookie a la hora actual, la sesión expiró por sí sola.
fuente
Como se mencionó en varios lugares, tampoco puedo hacer que la función req.session.destroy () funcione correctamente.
Este es mi trabajo alrededor ... parece funcionar, y aún permite que se use req.flash
Si elimina o establece req.session = null; , parece que no puedes usar req.flash
fuente