95

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

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

4

10 回答 10

140

Express 4.x 更新答案

会话处理不再内置于 Express 中。这个答案是指标准会话模块: https ://github.com/expressjs/session

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

req.session.destroy();

文档在这方面有点没用。它说:

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

这并不意味着当前会话将在下一个请求时重新加载。这意味着下次请求时将在您的会话存储中创建一个干净的空会话。(大概会话 ID 没有改变,但我没有测试过。)

于 2015-04-14T05:23:56.837 回答
96

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

于 2011-04-06T21:40:21.470 回答
26

该问题没有说明正在使用哪种类型的会话存储。两个答案似乎都是正确的。

对于基于 cookie 的会话:

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

req.session = null // Deletes the cookie.

对于基于 Redis 等的会话:

req.session.destroy // Deletes the session in the database.
于 2014-01-26T06:32:33.733 回答
9

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

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

req.session = null
于 2013-05-15T08:25:59.653 回答
8

利用,

delete req.session.yoursessionname;
于 2013-03-06T11:42:24.607 回答
8

Session.destroy(回调)

销毁会话并取消设置 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
于 2020-02-24T19:39:23.687 回答
6

结束服务器端会话

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;
};

结束 cookie 会话

https://github.com/expressjs/cookie-session#destroying-a-session

req.session = null;
于 2014-12-31T09:30:19.477 回答
0

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.sessionStore.destroy方法。

于 2021-12-20T22:39:50.353 回答
0
req.session.destroy(); 

以上对我不起作用,所以我这样做了。

req.session.cookie.expires = new Date().getTime();

通过将 cookie 的过期时间设置为当前时间,会话会自行过期。

于 2018-12-06T16:04:20.687 回答
-7

正如在几个地方所提到的,我也无法让 req.session.destroy() 函数正常工作。

这是我的解决方法..似乎可以解决问题,并且仍然允许使用 req.flash

req.session = {};

如果删除或设置req.session = null; ,看来你不能使用 req.flash

于 2015-06-28T23:41:33.930 回答