我觉得这必须埋在文档中的某个地方,但我找不到。
如何在ExpressJS中关闭或结束(或终止)会话(无论如何)?
Answers:
会话处理不再内置于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.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.
用,
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