【发布时间】:2011-07-31 04:53:33
【问题描述】:
我觉得这必须隐藏在文档中的某个地方,但我找不到它。
如何在 ExpressJS 中关闭、结束或终止(无论如何)会话?
【问题讨论】:
我觉得这必须隐藏在文档中的某个地方,但我找不到它。
如何在 ExpressJS 中关闭、结束或终止(无论如何)会话?
【问题讨论】:
没关系,我是req.session.destroy();
【讨论】:
req.session.destroy();。
使用,
delete req.session.yoursessionname;
【讨论】:
【讨论】:
该问题没有说明正在使用哪种类型的会话存储。两个答案似乎都是正确的。
对于基于 cookie 的会话:
来自http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
对于基于 Redis 等的会话:
req.session.destroy // Deletes the session in the database.
【讨论】:
https://github.com/expressjs/session#sessiondestroycallback
req.session.destory();
注意,这本质上是对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;
};
https://github.com/expressjs/cookie-session#destroying-a-session
req.session = null;
【讨论】:
会话处理不再内置于 Express 中。这个答案指的是标准会话模块:https://github.com/expressjs/session
要清除会话数据,只需使用:
req.session.destroy();
文档在这方面有点没用。它说:
销毁会话,删除req.session,下次请求会重新生成。
req.session.destroy(function(err) { // cannot access session here })
这不意味着当前会话将在下一个请求时重新加载。这意味着下次请求时将在您的会话存储中创建一个干净的空会话。 (大概会话 ID 没有改变,但我没有测试过。)
【讨论】:
正如在几个地方提到的,我也无法让 req.session.destroy() 函数正常工作。
这是我的解决方法 .. 似乎可以解决问题,并且仍然允许使用 req.flash
req.session = {};
如果你删除或设置 req.session = null; ,那么你似乎不能使用 req.flash
【讨论】:
req.session.destroy();
以上对我不起作用,所以我这样做了。
req.session.cookie.expires = new Date().getTime();
通过将cookie的过期时间设置为当前时间,会话自行过期。
【讨论】:
销毁会话并取消设置 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.user = { }。我记得password.js 使用req.user 来跟踪登录用户。
您可以使用req.session.id 或req.sessionID 检索会话的ID,然后将其传递给req.sessionStore.destroy 方法,如下所示:
const sessionID = req.session.id;
req.sessionStore.destroy(sessionID, (err) => {
// callback function. If an error occurs, it will be accessible here.
if(err){
return console.error(err)
}
console.log("The session has been destroyed!")
})
【讨论】: