Мне кажется, это должно быть где-то в документации, но я не могу его найти.
Как закрыть или завершить или убить (что угодно) сеанс в ExpressJS?
Ответы:
Обработка сеансов больше не встроена в Express. Этот ответ относится к стандартному модулю сеанса: https://github.com/expressjs/session
Чтобы очистить данные сеанса, просто используйте:
req.session.destroy();
Документация по этому поводу немного бесполезна. Он говорит:
Уничтожает сеанс, удаляя req.session, при следующем запросе будет повторно сгенерирован.
req.session.destroy(function(err) { // cannot access session here })
Это не означает, что текущий сеанс будет перезагружен при следующем запросе. Это означает, что при следующем запросе в вашем хранилище сеансов будет создан чистый пустой сеанс. (Предположительно идентификатор сеанса не меняется, но я этого не проверял.)
Неважно, это req.session.destroy();
req.session.destroy();
как acidghost.
Вопрос не прояснил, какой тип хранилища сеансов используется. Оба ответа кажутся правильными.
Для сеансов на основе файлов 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, просто присвойте сеансу значение null перед ответом:
req.session = null
использовать
delete req.session.yoursessionname;
Использование 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;
};
Уничтожает сеанс и отключает свойство req.session. По завершении будет вызван обратный вызов.
↓ Безопасный способ ↓ ✅
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓ небезопасный способ ↓ ❌
req.logout();
res.redirect('/') // can be called before logout is done
req.session.destroy();
Вышеупомянутое не сработало для меня, поэтому я сделал это.
req.session.cookie.expires = new Date().getTime();
Установив срок действия cookie на текущее время, сеанс истек сам по себе.
Как упоминалось в нескольких местах, я также не могу заставить функцию req.session.destroy () работать правильно.
Это моя работа ... похоже, помогает, и все же позволяет использовать req.flash
req.session = {};
Если вы удалите или установите req.session = null; , значит, вы не можете использовать req.flash