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?
Respuestas:
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();
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.
De http://expressjs.com/api.html#cookieSession
Para borrar una cookie, simplemente asigne la sesión a nula antes de responder:
req.session = null
utilizar,
delete req.session.yoursessionname;
Usar req.session = null;
, en realidad no eliminará la instancia de sesión. La solución más adecuada sería req.session.destroy();
, pero esto es esencialmente una envoltura para delete 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;
};
Destruye la sesión y anulará la propiedad req.session. Una vez completada, se invocará la 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
req.session.destroy();
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.
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
req.session = {};
Si elimina o establece req.session = null; , parece que no puedes usar req.flash