如何在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.
使用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;