Antworten:
Die Sitzungsbehandlung ist nicht mehr in Express integriert. Diese Antwort bezieht sich auf das Standard-Sitzungsmodul: https://github.com/expressjs/session
Verwenden Sie zum Löschen der Sitzungsdaten einfach:
req.session.destroy();
Die Dokumentation ist dazu etwas nutzlos. Es sagt:
Zerstört die Sitzung, entfernt die Anforderung und wird bei der nächsten Anforderung neu generiert.
req.session.destroy(function(err) { // cannot access session here })
Dies bedeutet nicht , dass die aktuelle Sitzung bei der nächsten Anforderung erneut geladen wird. Dies bedeutet, dass bei der nächsten Anforderung eine saubere leere Sitzung in Ihrem Sitzungsspeicher erstellt wird. (Vermutlich ändert sich die Sitzungs-ID nicht, aber das habe ich nicht getestet.)
Egal, es ist req.session.destroy();
req.session.destroy();
als Acidghost verwendet.
Die Frage stellte nicht klar, welche Art von Sitzungsspeicher verwendet wurde. Beide Antworten scheinen richtig zu sein.
Für Cookie-basierte Sitzungen:
Von http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
Für Redis usw. -basierte Sitzungen:
req.session.destroy // Deletes the session in the database.
Von http://expressjs.com/api.html#cookieSession
Um ein Cookie zu löschen, weisen Sie die Sitzung einfach null zu, bevor Sie antworten:
req.session = null
verwenden,
delete req.session.yoursessionname;
Mit req.session = null;
wird die Sitzungsinstanz nicht gelöscht. Die am besten geeignete Lösung wäre req.session.destroy();
, aber dies ist im Wesentlichen ein Wrapper für 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;
};
Zerstört die Sitzung und hebt die Eigenschaft req.session auf. Nach Abschluss wird der Rückruf aufgerufen.
↓ Sicherer Weg ↓ ✅
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓ Unsicherer Weg ↓ ❌
req.logout();
res.redirect('/') // can be called before logout is done
req.session.destroy();
Das obige hat bei mir nicht funktioniert, also habe ich das gemacht.
req.session.cookie.expires = new Date().getTime();
Durch Setzen des Ablaufs des Cookies auf die aktuelle Zeit lief die Sitzung von selbst ab.
Wie an mehreren Stellen erwähnt, kann ich auch die Funktion req.session.destroy () nicht ordnungsgemäß ausführen.
Dies ist meine Arbeit. Scheint den Trick zu tun und erlaubt trotzdem die Verwendung von req.flash
req.session = {};
Wenn Sie req.session = null löschen oder setzen ; , anscheinend können Sie req.flash nicht verwenden