我觉得这必须埋在文档中的某个地方,但我找不到它。
你如何在 ExpressJS 中关闭或结束或终止(无论如何)会话?
会话处理不再内置于 Express 中。这个答案是指标准会话模块: https ://github.com/expressjs/session
要清除会话数据,只需使用:
req.session.destroy();
文档在这方面有点没用。它说:
销毁会话,删除req.session,下次请求会重新生成。
req.session.destroy(function(err) { // cannot access session here })
这并不意味着当前会话将在下一个请求时重新加载。这意味着下次请求时将在您的会话存储中创建一个干净的空会话。(大概会话 ID 没有改变,但我没有测试过。)
没关系,就是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 属性。完成后,将调用回调。
↓安全方式↓ ✅</p>
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓不安全的方式↓ ❌</p>
req.logout();
res.redirect('/') // can be called before logout is done
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;
req.session.id
您可以使用or检索会话的 id,req.sessionID
然后将其传递给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!")
})
req.session.destroy();
以上对我不起作用,所以我这样做了。
req.session.cookie.expires = new Date().getTime();
通过将 cookie 的过期时间设置为当前时间,会话会自行过期。
正如在几个地方所提到的,我也无法让 req.session.destroy() 函数正常工作。
这是我的解决方法..似乎可以解决问题,并且仍然允许使用 req.flash
req.session = {};
如果删除或设置req.session = null; ,看来你不能使用 req.flash