Cómo finalizar una sesión en ExpressJS


88

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:


122

Respuesta actualizada Express 4.x

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).


¿Hay alguna manera de destruir la sesión de las sesiones y no de la solicitud inmediata? Por ejemplo, si tuviera que implementar la funcionalidad de cerrar sesión en todos los dispositivos, necesitaría eso
Muhammad Umer

1
@MuhammadUmer Hasta donde yo sé, no existe un mecanismo incorporado para destruir una sesión arbitraria. Puede implementar esto usted mismo fácilmente eliminando las claves asociadas con la sesión del almacenamiento o creando su propio contenedor de sesión.
Brad

93

No importa, es req.session.destroy();


8
Esto no funciona para mí en Express 3 .. Estoy tratando de llamar a ´req.session.destroy () ´
acidghost

6
Funcionando bien para mí en ExpressJS 3.00. Usado req.session.destroy();como lo hizo acidghost.
hexacianuro

1
el uso de req.session.destroy () también me funciona en Express 2.5
TulioPa

1
¿Dónde está documentado esto? Estoy tratando de encontrarlo.
huggie

25

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.

1
req.session.destroy es esencialmente un contenedor para "eliminar req.session", consulte el código fuente aquí: github.com/expressjs/session/blob/master/session/session.js
tfmontague


6

utilizar,

delete req.session.yoursessionname;

Realmente me gustaría ver un documento sobre esto.
Lazy

5
Para todos aquellos que votaron en contra de @Nithin; el método de función session.destroy () como se documenta en github (github.com/expressjs/session/blob/master/session/session.js) usa "delete this.req.session" - no es exactamente la respuesta de @ Nithin, pero el uso de "eliminar" también es una solución correcta (y no se trata en otras respuestas).
tfmontague

¿Es esta la solución adecuada? Sin pérdida de memoria, cualquier cosa traviesa no sucederá, ¿verdad?
Rajath


5

Session.destroy (devolución de llamada)

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

0
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.


-5

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


1
Este es un problema de seguridad, ya que no cambia el hash de la sesión
Tosh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.