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:
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é.)
Peu importe, c'est req.session.destroy();
req.session.destroy();
comme l'a fait acidghost.
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.
Depuis http://expressjs.com/api.html#cookieSession
Pour effacer un cookie, attribuez simplement la valeur null à la session avant de répondre:
req.session = null
utilisation,
delete req.session.yoursessionname;
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;
};
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
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.
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