Comment terminer une session dans ExpressJS


88

J'ai l'impression que cela doit être enterré quelque part dans la documentation, mais je ne peux pas le trouver.

Comment fermer ou terminer ou tuer (peu importe) une session dans ExpressJS?

Réponses:


121

Réponse mise à jour d'Express 4.x

La gestion des sessions n'est plus intégrée à Express. Cette réponse fait référence au module de session standard: https://github.com/expressjs/session

Pour effacer les données de session, utilisez simplement:

req.session.destroy();

La documentation est un peu inutile à ce sujet. Ça dit:

Détruit la session, supprimant req.session, sera re-généré la prochaine demande. req.session.destroy(function(err) { // cannot access session here })

Cela ne signifie pas que la session en cours sera rechargée à la prochaine demande. Cela signifie qu'une session vide propre sera créée dans votre magasin de sessions à la prochaine demande. (Vraisemblablement, l'ID de session ne change pas, mais je ne l'ai pas testé.)


existe-t-il un moyen de détruire la session des sessions et non de la demande immédiate. Par exemple, si je devais implémenter la déconnexion de toutes les fonctionnalités des appareils, j'en aurais besoin
Muhammad Umer

1
@MuhammadUmer Autant que je sache, il n'y a pas de mécanisme intégré pour détruire une session arbitraire. Vous pouvez l'implémenter vous-même facilement en supprimant les clés associées à la session du stockage ou en créant votre propre wrapper de session.
Brad

92

Peu importe, c'est req.session.destroy();


8
Cela ne fonctionne pas pour moi sur express 3. J'essaye d'appeler ´req.session.destroy () ´
acidghost

6
Fonctionne bien pour moi sur ExpressJS 3.00. Utilisé req.session.destroy();comme l'a fait acidghost.
hexacyanide

1
l'utilisation de req.session.destroy () fonctionne aussi pour moi dans express 2.5
TulioPa

1
Où est-ce documenté? J'essaye de le trouver.
huggie

24

La question ne clarifiait pas le type de magasin de sessions utilisé. Les deux réponses semblent correctes.

Pour les sessions basées sur les cookies:

Depuis http://expressjs.com/api.html#cookieSession

req.session = null // Deletes the cookie.

Pour les sessions basées sur Redis, etc.:

req.session.destroy // Deletes the session in the database.

1
req.session.destroy est essentiellement un wrapper pour "delete req.session", voir le code source ici: github.com/expressjs/session/blob/master/session/session.js
tfmontague


6

utilisation,

delete req.session.yoursessionname;

J'aimerais vraiment voir un document à ce sujet.
Lazy

5
Pour tous ceux qui votent à la baisse @Nithin; la méthode-fonction session.destroy () telle que documentée sur github (github.com/expressjs/session/blob/master/session/session.js) utilise "delete this.req.session" - ce n'est pas exactement la réponse de @ Nithin, mais l'utilisation de «supprimer» est également une solution correcte (et non traitée dans d'autres réponses).
tfmontague

Est-ce que c'est la bonne solution? Pas de fuite de mémoire, quoi que ce soit de malicieux n'arrivera pas?
Rajath

5

L'utilisation de req.session = null;, ne supprimera pas réellement l'instance de session. La solution la plus appropriée serait req.session.destroy();, mais il s'agit essentiellement d'un wrapper pour 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;
};

4

Session.destroy (rappel)

Détruit la session et annulera la propriété req.session. Une fois terminé, le rappel sera appelé.

↓ Voie sécurisée ↓ ✅

req.session.destroy((err) => {
  res.redirect('/') // will always fire after session is destroyed
})

Manière non sécurisée ↓ ❌

req.logout();
res.redirect('/') // can be called before logout is done

0
req.session.destroy(); 

Ce qui précède n'a pas fonctionné pour moi, alors je l'ai fait.

req.session.cookie.expires = new Date().getTime();

En définissant l'expiration du cookie sur l'heure actuelle, la session a expiré d'elle-même.


-5

Comme mentionné à plusieurs endroits, je ne parviens pas non plus à faire fonctionner correctement la fonction req.session.destroy ().

C'est mon travail ... semble faire l'affaire, et permet toujours d'utiliser req.flash

req.session = {};

Si vous supprimez ou définissez req.session = null; , il semble que vous ne puissiez pas utiliser req.flash


1
Ceci est un problème de sécurité, car il ne modifie pas le hachage de session
Tosh
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.