如何在ExpressJS中结束会话

时间:2011-04-06 21:36:27

标签: session node.js express

我觉得这必须埋在文档中的某处,但我找不到它。

你如何在ExpressJS中关闭或结束或杀死任何会话?

9 个答案:

答案 0 :(得分:94)

Express 4.x更新的答案

会话处理不再内置于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)

来自http://expressjs.com/api.html#cookieSession

要清除cookie,只需在响应之前将会话分配为null:

req.session = null

答案 4 :(得分:5)

Session.destroy(callback)

销毁会话,并将取消设置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