我正在使用快速会话和mongo connect for user auth,角色客户端通过CORS请求使用它。
app.use(express.cookieParser());
app.use(express.session({
secret: 'xxxxxx',
store: new MongoStore({
db: 'dbname',
clear_interval: 3600,
host: 'localhost',
port: 27017
})
}));
登录正常,cookie被删除,会话全部按预期工作。
我的问题是结束会话。我有一个注销路线,基本上这样做:
req.session.destroy(function() {
// log out code
});
但是在mongo db.sessions中,会话仍然存在,并且sid cookie仍然保留在用户代理上,因此如果用户重新访问任何" protected"注销会话后的URL将重新生成。
所以看起来我需要删除cookie或从db中删除会话,后者似乎是错误的,所以我试图删除cookie,但没有运气,在Express中尝试了这个:
req.session.destroy(function() {
res.clearCookie('connect.sid', { path: '/' });
});
似乎我无法使用javascript删除客户端上的sid cookie,因为它只是http(??),这不起作用:
document.cookie = 'connect.sid=; path=/; domain=localhost; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
任何想法如何摆脱这个讨厌的会话cookie ??!
答案 0 :(得分:2)
req.session.destroy()
应清除db中的会话。
Express在尝试销毁会话时可能正在使用不同的sessionID。确保Session.prototype.destroy
实际上正在提取与this.id
中的ID匹配的正确mongodb.sessions
。
我刚遇到此问题,原因是我向服务器发出的退出用户请求并未包含会话Cookie(已遗漏withCredentials
)。
$.ajax({
url: 'http://url/auth/logout',
type: 'GET',
xhrFields: {
withCredentials: true
}
});
这导致express为请求生成一个新的会话ID,并要求mongodb删除具有该新id的会话(保持旧的id不变)。