我觉得这必须埋在文档中的某处,但我找不到它。
你如何在ExpressJS中关闭或结束或杀死任何会话?
答案 0 :(得分:94)
会话处理不再内置于Express中。这个答案涉及标准会话模块:https://github.com/expressjs/session
要清除会话数据,只需使用:
req.session.destroy();
文档对此有点无用。它说:
销毁会话,删除req.session,将重新生成下一个请求。
req.session.destroy(function(err) { // cannot access session here })
表示当前会话将在下一个请求中重新加载。这意味着将在下次请求时在会话存储中创建一个干净的空会话。 (据推测会话ID不会改变,但我没有测试过。)
答案 1 :(得分:86)
没关系,这是req.session.destroy();
答案 2 :(得分:22)
该问题没有说明正在使用的会话存储类型。这两个答案似乎都是正确的。
对于基于Cookie的会话:
来自http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
对于Redis等基于会话的内容:
req.session.destroy // Deletes the session in the database.
答案 3 :(得分:9)
答案 4 :(得分:5)
销毁会话,并将取消设置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
答案 5 :(得分:4)
使用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 :(得分:2)
使用,
delete req.session.yoursessionname;
答案 7 :(得分:0)
req.session.destroy();
以上对我不起作用,所以我做到了。
req.session.cookie.expires = new Date().getTime();
通过将Cookie的过期时间设置为当前时间,会话可以自行终止。
答案 8 :(得分:-4)
正如在几个地方所提到的,我也无法让req.session.destroy()函数正常工作。
这是我的工作..似乎可以解决问题,仍然允许使用req.flash
req.session = {};
如果您删除或设置 req.session = null; ,那么您似乎无法使用req.flash