如何在ExpressJS中结束会话

我觉得这个文件必须被埋在某个地方,但是我找不到。

如何在ExpressJS中closures,结束或杀死(不pipe)会话?

Express 4.x更新的答案

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

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

req.session.destroy(); 

这个文档有点无用。 它说:

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

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

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

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

对于基于cookie的会话:

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

 req.session = null // Deletes the cookie. 

对于Redis等基于会话:

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

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

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

 req.session = null 

使用req.session = null; ,实际上不会删除会话实例。 最合适的解决scheme是req.session.destroy(); ,但这本质上是一个delete req.session;的包装器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; }; 

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

这是我的工作..似乎做的伎俩,仍然允许使用req.flash

 req.session = {}; 

如果删除或设置了req.session = null; ,似乎那么你不能使用req.flash

使用,

 delete req.session.yoursessionname;