Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/session/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 如何在ExpressJS中结束会话_Session_Node.js_Express - Fatal编程技术网

Session 如何在ExpressJS中结束会话

Session 如何在ExpressJS中结束会话,session,node.js,express,Session,Node.js,Express,我觉得这应该被藏在文档的某个地方,但我找不到它 如何关闭、结束或终止ExpressJS中的会话?没关系,它是req.session.destroy()使用 delete req.session.yoursessionname; 从 要清除cookie,只需在响应之前将会话分配为null: req.session = null 这个问题没有澄清正在使用的会话存储的类型。两个答案似乎都是正确的 对于基于cookie的会话: req.session.destroy // Deletes the s

我觉得这应该被藏在文档的某个地方,但我找不到它


如何关闭、结束或终止ExpressJS中的会话?

没关系,它是
req.session.destroy()

使用

delete req.session.yoursessionname;

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

req.session = null

这个问题没有澄清正在使用的会话存储的类型。两个答案似乎都是正确的

对于基于cookie的会话:

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

对于基于Redis等的会话:

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

使用
req.session=null,实际上不会删除会话实例。最合适的解决方案是
req.session.destroy(),,
但这本质上是
delete req.session的包装器

Express 4.x更新答案 会话处理不再内置于Express中。此答案涉及标准会话模块:

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

req.session.destroy();
文档在这方面有点无用。它说:

销毁会话,删除req.session,将在下一个请求中重新生成。 请求会话销毁(功能(错误){ //无法在此访问会话 })


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

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

这是我的工作。。似乎做到了这一点,但仍然允许使用req.flash

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

req.session.destroy(); 
以上这些对我不起作用,所以我做了这个

req.session.cookie.expires = new Date().getTime();
通过将cookie的过期时间设置为当前时间,会话将自行过期

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

这对我来说在express 3上不起作用。。我正在尝试调用'req.session.destroy()',在ExpressJS 3.00上运行良好。使用
req.session.destroy()与acidghost一样。在express 2.5中,req.session.destroy()的使用也适用于我,这在哪里有文档记录?我正在努力找到它。我真的很想看一份关于这件事的文件。对于所有投反对票的人@Nithin;github(github.com/expressjs/session/blob/master/session/session.js)上记录的session.destroy()函数方法使用“delete this.req.session”-这不完全是@Nithin的答案,但使用“delete”也是正确的解决方案(其他答案中没有涉及)。这是正确的解决方案吗?没有内存泄漏,任何有害的事情都不会发生,对吗?req.session.destroy本质上是“delete req.session”的包装器,请参阅此处的源代码:是否有方法从会话而不是立即请求中销毁会话。例如,如果我要实现我需要的所有设备注销功能that@MuhammadUmer据我所知,没有用于销毁任意会话的内置机制。您可以通过从存储器中删除与会话相关联的密钥或创建自己的会话包装器来轻松实现这一点。这是一个安全问题,因为它不会更改会话哈希值。如果我有flash,该怎么办,因为它会导致错误(这是显而易见的)。|UnhandledPromisejectionWarning:Error:req.flash()需要会话在这种情况下,我认为您可以使用
req.user={}
password.js
使用
req.user
来跟踪登录的用户。
req.logout();
res.redirect('/') // can be called before logout is done