Как завершить сеанс в ExpressJS - PullRequest
79 голосов
/ 07 апреля 2011

Я чувствую, что это должно быть где-то похоронено в документации, но я не могу найти это.

Как закрыть, завершить или убить (что угодно) сеанс в ExpressJS?

Ответы [ 8 ]

98 голосов
/ 14 апреля 2015

Экспресс 4.x Обновленный ответ

Обработка сеансов больше не встроена в Express. Этот ответ относится к стандартному сеансовому модулю: https://github.com/expressjs/session

Чтобы очистить данные сеанса, просто используйте:

req.session.destroy();

Документация по этому вопросу немного бесполезна. Там написано:

Уничтожает сеанс, удаляя req.session, будет сгенерирован следующий запрос. req.session.destroy(function(err) { // cannot access session here })

Это не означает, что текущий сеанс будет перезагружен при следующем запросе. Это означает, что чистый пустой сеанс будет создан в вашем хранилище сеансов по следующему запросу. (Предположительно, идентификатор сессии не меняется, но я этого не проверял.)

89 голосов
/ 07 апреля 2011

Неважно, это req.session.destroy();

22 голосов
/ 26 января 2014

Вопрос не прояснил, какой тип хранилища сеансов использовался.Оба ответа кажутся правильными.

Для сеансов на основе файлов cookie:

От http://expressjs.com/api.html#cookieSession

req.session = null // Deletes the cookie.

Для Redis и т. Д.сеансы на основе:

req.session.destroy // Deletes the session in the database.
8 голосов
/ 15 мая 2013

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

Чтобы удалить cookie, просто назначьте сеансу значение NULL, прежде чем ответить:

req.session = null
4 голосов
/ 31 декабря 2014

Использование req.session = null; фактически не удалит экземпляр сеанса.Наиболее правильное решение было бы req.session.destroy();, но это, по сути, оболочка для 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;
};
3 голосов
/ 06 марта 2013

использование,

delete req.session.yoursessionname;
0 голосов
/ 06 декабря 2018
req.session.destroy(); 

Выше не работает для меня, поэтому я сделал это.

req.session.cookie.expires = new Date().getTime();

Если срок действия файла cookie истекает до текущего времени, сеанс истекает сам по себе.

0 голосов
/ 29 июня 2015

Как уже упоминалось в нескольких местах, я также не могу заставить функцию req.session.destroy () работать правильно.

Это моя работа ... кажется, делает свое дело, и все еще позволяет использовать req.flash

req.session = {};

Если вы удалите или установите req.session = null; , кажется, тогда вы не сможете использовать req.flash

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...