Czuję, że trzeba to gdzieś zakopać w dokumentacji, ale nie mogę tego znaleźć.
Jak zamknąć, zakończyć lub zabić (cokolwiek) sesję w ExpressJS?
Obsługa sesji nie jest już wbudowana w Express. Ta odpowiedź odnosi się do standardowego modułu sesji: https://github.com/expressjs/session
Aby wyczyścić dane sesji, po prostu użyj:
req.session.destroy();
Dokumentacja jest w tym trochę bezużyteczna. To mówi:
Niszczy sesję, usuwa req.session, zostanie ponownie wygenerowane następne żądanie.
req.session.destroy(function(err) { // cannot access session here })
Ten sposób nie oznacza, że bieżąca sesja zostanie ponownie załadowany na następne żądanie. Oznacza to, że przy następnym żądaniu w Twoim magazynie sesji zostanie utworzona czysta, pusta sesja. (Prawdopodobnie identyfikator sesji się nie zmienia, ale nie testowałem tego).
Nieważne, to jest
req.session.destroy();
źródło
req.session.destroy();
jako acidghost.Pytanie nie wyjaśniało, jaki typ magazynu sesji był używany. Obie odpowiedzi wydają się prawidłowe.
W przypadku sesji opartych na plikach cookie:
Z http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
W przypadku sesji opartych na Redis itp .:
req.session.destroy // Deletes the session in the database.
źródło
Z http://expressjs.com/api.html#cookieSession
Aby wyczyścić plik cookie, po prostu przypisz sesję do wartości null przed udzieleniem odpowiedzi:
req.session = null
źródło
posługiwać się,
delete req.session.yoursessionname;
źródło
Użycie
req.session = null;
nie spowoduje usunięcia instancji sesji. Najwłaściwszym rozwiązaniem byłobyreq.session.destroy();
, ale jest to zasadniczo opakowaniedelete 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; };
źródło
Session.destroy (wywołanie zwrotne)
↓ Bezpieczny sposób ↓ ✅
req.session.destroy((err) => { res.redirect('/') // will always fire after session is destroyed })
↓ Niezabezpieczony sposób ↓ ❌
req.logout(); res.redirect('/') // can be called before logout is done
źródło
Powyższe nie zadziałało, więc zrobiłem to.
req.session.cookie.expires = new Date().getTime();
Ustawiając datę wygaśnięcia pliku cookie na aktualny czas, sesja wygasła sama.
źródło
Jak wspomniano w kilku miejscach, nie jestem również w stanie zmusić funkcji req.session.destroy () do prawidłowego działania.
To jest moja obejście ... wydaje się działać i nadal pozwala na użycie req.flash
Jeśli usuniesz lub ustawisz req.session = null; , wygląda na to, że nie możesz użyć req.flash
źródło