Как завершить сеанс в ExpressJS

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

Как вы закрываете или завершаете или убиваете (независимо) сеанс в ExpressJS?

Ответ 1

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

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

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

req.session.destroy();

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

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

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

Ответ 2

Ничего, req.session.destroy();

Ответ 3

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

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

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

req.session = null // Deletes the cookie.

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

req.session.destroy // Deletes the session in the database.

Ответ 4

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

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

req.session = null

Ответ 5

Используя 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;
};

Ответ 6

delete req.session.yoursessionname;

Ответ 7

req.session.destroy(); 

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

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

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

Ответ 8

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

Это моя работа. Кажется, это трюк и по-прежнему позволяет использовать req.flash.

req.session = {};

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