So beenden Sie eine Sitzung in ExpressJS


88

Ich habe das Gefühl, dass dies irgendwo in der Dokumentation vergraben sein muss, aber ich kann es nicht finden.

Wie können Sie eine Sitzung in ExpressJS schließen, beenden oder beenden (was auch immer)?

Antworten:


120

Express 4.x Aktualisierte Antwort

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


Gibt es eine Möglichkeit, eine Sitzung aus Sitzungen und nicht aus der unmittelbaren Anforderung heraus zu zerstören? Wenn ich zum Beispiel implementieren würde, mich von allen
Muhammad Umer

1
@ MuhammadUmer Soweit ich weiß, gibt es keinen eingebauten Mechanismus, um eine beliebige Sitzung zu zerstören. Sie können dies einfach selbst implementieren, indem Sie die mit der Sitzung verknüpften Schlüssel aus dem Speicher löschen oder einen eigenen Sitzungs-Wrapper erstellen.
Brad

92

Egal, es ist req.session.destroy();


8
Dies funktioniert bei Express 3 nicht für mich. Ich versuche, ´req.session.destroy () ´
acidghost

6
Funktioniert gut für mich mit ExpressJS 3.00. Wird req.session.destroy();als Acidghost verwendet.
Hexacyanid

1
Die Verwendung von req.session.destroy () funktioniert auch für mich in Express 2.5
TulioPa

1
Wo ist das dokumentiert? Ich versuche es zu finden.
Huggie

24

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.

1
req.session.destroy ist im Wesentlichen ein Wrapper für "delete req.session", siehe den Quellcode hier: github.com/expressjs/session/blob/master/session/session.js
tfmontague


5

verwenden,

delete req.session.yoursessionname;

Ich würde wirklich gerne ein Dokument darüber sehen.
Fauler

5
Für alle, die @Nithin herabgestimmt haben; Die auf github (github.com/expressjs/session/blob/master/session/session.js) dokumentierte Funktionsmethode session.destroy () verwendet "delete this.req.session" - es ist nicht genau die Antwort von @ Nithin, aber Die Verwendung von "Löschen" ist ebenfalls eine korrekte Lösung (und wird in anderen Antworten nicht behandelt).
Montag

Ist dies die richtige Lösung? Kein Speicherverlust, irgendetwas Schelmisches wird nicht passieren, oder?
Rajath


4

Session.destroy (Rückruf)

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

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


-5

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


1
Dies ist ein Sicherheitsproblem, da es den Sitzungs-Hash nicht ändert
Tosh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.