Мне кажется, что это должно быть похоронено где-то в документации, но я не могу его найти.
Как вы закрываете или завершаете или убиваете (независимо) сеанс в ExpressJS?
Мне кажется, что это должно быть похоронено где-то в документации, но я не могу его найти.
Как вы закрываете или завершаете или убиваете (независимо) сеанс в ExpressJS?
Обработка сеанса больше не встроена в Express. Этот ответ относится к стандартному модулю сеанса: https://github.com/expressjs/session
Чтобы очистить данные сеанса, просто используйте:
req.session.destroy();
Документация на этом немного бесполезна. В нем говорится:
Уничтожает сеанс, удаляя req.session, будет повторно сгенерирован следующий запрос.
req.session.destroy(function(err) { // cannot access session here })
Это не означает, что текущий сеанс будет перезагружен при следующем запросе. Это означает, что в следующем сеансе будет создан чистый пустой сеанс в хранилище сеансов. (Предположительно, идентификатор сеанса не меняется, но я его не тестировал.)
Ничего, req.session.destroy();
Вопрос не уточнил, какой тип хранилища сеансов использовался. Оба ответа кажутся правильными.
Для сеансов на основе файлов cookie:
От http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
Для сеансов Redis и т.д.
req.session.destroy // Deletes the session in the database.
От http://expressjs.com/api.html#cookieSession
Чтобы очистить файл cookie, просто назначьте сеанс нулевому, прежде чем отвечать:
req.session = null
Используя 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;
};
delete req.session.yoursessionname;
req.session.destroy();
Выше не работало для меня, поэтому я сделал это.
req.session.cookie.expires = new Date().getTime();
Установив истечение срока действия файла cookie на текущее время, сеанс истек сам по себе.
Как упоминалось в нескольких местах, я также не могу заставить функцию req.session.destroy() работать правильно.
Это моя работа. Кажется, это трюк и по-прежнему позволяет использовать req.flash.
req.session = {};
Если вы удалите или установите req.session = null;, кажется, что вы не можете использовать req.flash