如何在ExpressJS中结束会话

Ste*_*hen 82 session node.js express

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

你如何在ExpressJS中关闭或结束或杀死(无论如何)会话?

Bra*_*rad 103

Express 4.x更新的答案

会话处理不再内置到Express中.这个答案涉及标准会话模块:https: //github.com/expressjs/session

要清除会话数据,只需使用:

req.session.destroy();
Run Code Online (Sandbox Code Playgroud)

文档对此有点无用.它说:

销毁会话,删除req.session,将重新生成下一个请求. req.session.destroy(function(err) { // cannot access session here })

但这并不意味着,本届会议将在下一个请求重新加载.这意味着将在下次请求时在会话存储中创建一个干净的空会话.(据推测,会话ID没有变化,但我没有测试过.)


Ste*_*hen 89

没关系,这是 req.session.destroy();

  • 这对我来说不适用于快递3 ..我试图打电话给'req.session.destroy()' (8认同)
  • 在ExpressJS 3.00上工作正常.使用`req.session.destroy();`作为acidghost. (6认同)

Blu*_*rts 23

问题没有说明正在使用什么类型的会话存储.这两个答案似乎都是正确的.

对于基于cookie的会话:

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

req.session = null // Deletes the cookie.
Run Code Online (Sandbox Code Playgroud)

对于Redis等基于会话:

req.session.destroy // Deletes the session in the database.
Run Code Online (Sandbox Code Playgroud)

  • 似乎过时了. (2认同)

小智 8

用,

delete req.session.yoursessionname;
Run Code Online (Sandbox Code Playgroud)

  • 对于所有投反对票的@Nithin;github (github.com/expressjs/session/blob/master/session/session.js) 上记录的 session.destroy() 函数方法使用“删除 this.req.session” - 这不完全是@Nithin 的答案,但是使用“删除”也是一个正确的解决方案(并且没有包含在其他答案中)。 (5认同)

str*_*am7 8

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

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

req.session = null
Run Code Online (Sandbox Code Playgroud)


Has*_*alp 8

Session.destroy(回调)

销毁会话并取消设置 req.session 属性。完成后,将调用回调。

安全方式↓ ?

req.session.destroy((err) => {
  res.redirect('/') // will always fire after session is destroyed
})
Run Code Online (Sandbox Code Playgroud)

不安全的方式↓ ?

req.logout();
res.redirect('/') // can be called before logout is done
Run Code Online (Sandbox Code Playgroud)


tfm*_*gue 5

使用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;
};
Run Code Online (Sandbox Code Playgroud)