如何在ExpressJS中结束会话


88

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

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

Answers:


121

Express 4.x更新的答案

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

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

req.session.destroy();

该文档对此没有多大用处。它说:

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

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


有没有办法从会话中破坏会话,而不是立即请求。例如,如果我要实现使我退出所有设备功能的功能,则需要使用
Muhammad Umer

1
据我所知,@ MuhammadUmer没有内置的机制可以销毁任意会话。您可以通过从存储中删除与会话关联的密钥或创建自己的会话包装器来轻松实现此目的。
Brad 2015年

92

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


8
这对Express 3无效。.我正在尝试致电‘req.session.destroy()’
acidghost 2012年

6
我可以在ExpressJS 3.00上正常工作。用作req.session.destroy();酸鬼了。

1
req.session.destroy()的使用对我来说也适用于Express 2.5
TulioPa

1
这在哪里记录?我正在寻找它。
huggie 2014年

24

这个问题并未阐明正在使用哪种类型的会话存储。这两个答案似乎都是正确的。

对于基于cookie的会话:

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

req.session = null // Deletes the cookie.

对于基于Redis等的会话:

req.session.destroy // Deletes the session in the database.

1
req.session.destroy本质上是“删除req.session”的包装,请参见此处的源代码:github.com/expressjs/session/blob/master/session/session.js
tfmontague 2014年


6

用,

delete req.session.yoursessionname;

我真的很想查看有关此文档。
懒惰2014年

5
对于所有拒绝@Nithin的人;github(github.com/expressjs/session/blob/master/session/session.js)上记录的session.destroy()函数方法使用“删除this.req.session”-这不是@Nithin的答案,但使用“删除”也是一种正确的解决方案(其他答案未涵盖)。
tfmontague 2014年

这是正确的解决方案吗?没有内存泄漏,任何顽皮的事情都不会发生,对吧?
Rajath



0
req.session.destroy(); 

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

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

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


-5

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

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

req.session = {};

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


1
这是一个安全问题,因为它不会更改会话哈希
-Tosh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.