Jak zakończyć sesję w ExpressJS

Czuję, że to musi być zakopane gdzieś w dokumentacji, ale nie mogę tego znaleźć.

Jak zamknąć, zakończyć lub zabić (cokolwiek) sesję w ExpressJS?

Author: lucapette, 2011-04-07

7 answers

Express 4.X zaktualizowana odpowiedź

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 trochę bezużyteczna. Pisze:

Niszczy sesję, usuwając req.sesji, zostanie ponownie wygenerowane następne żądanie. req.session.destroy(function(err) { // cannot access session here })

To nie oznacza, że bieżąca sesja zostanie ponownie załadowany przy następnym żądaniu. Oznacza to, że czysta pusta sesja zostanie utworzona w Twoim sklepie sesji przy następnym żądaniu. (Prawdopodobnie identyfikator sesji się nie zmienia, ale tego nie testowałem.)

 78
Author: Brad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-14 05:23:56

Nieważne, to req.session.destroy();

 81
Author: Stephen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-19 05:43:36

Pytanie nie wyjaśniło, jakiego rodzaju sklep sesyjny był używany. Obie odpowiedzi wydają się być poprawne.

Dla sesji opartych na plikach cookie:

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

req.session = null // Deletes the cookie.

Dla sesji opartych na Redis, etc:

req.session.destroy // Deletes the session in the database.
 21
Author: Blueshirts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-26 06:32:33

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

Aby wyczyścić plik cookie, po prostu Przypisz sesję Do null przed odpowiedzią:

req.session = null
 7
Author: stream7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-15 08:25:59

Użycie req.session = null; nie usunie instancji sesji. Najodpowiedniejszym rozwiązaniem byłoby req.session.destroy();, ale to jest zasadniczo opakowanie dla 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;
};
 2
Author: tfmontague,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-31 09:30:19

Użycie,

delete req.session.yoursessionname;
 0
Author: Nithin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-06 11:44:37

Jak wspomniano w kilku miejscach, nie jestem w stanie uzyskać req.sesja.funkcja destroy () działa poprawnie.

To moja praca .. wygląda na to, że działa i nadal pozwala na req.flash do użycia
req.session = {};

Jeśli usuniesz lub ustawisz req.session = null; , wydaje się, że wtedy nie można użyć req.flash

 -1
Author: gnB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-28 23:41:33