Мне кажется, это должно быть где-то в документации, но я не могу его найти.
Как закрыть или завершить или убить (что угодно) сеанс в 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; };
источник
Session.destroy (обратный вызов)
↓ Безопасный способ ↓ ✅
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.cookie.expires = new Date().getTime();
Установив срок действия cookie на текущее время, сеанс истек сам по себе.
источник
Как упоминалось в нескольких местах, я также не могу заставить функцию req.session.destroy () работать правильно.
Это моя работа ... похоже, помогает, и все же позволяет использовать req.flash
Если вы удалите или установите req.session = null; , значит, вы не можете использовать req.flash
источник