Mis*_*r P 5 cookies session mongodb express
我正在使用快速会话和 mongo 连接进行用户身份验证,它由 angular 客户端通过 CORS 请求使用。
app.use(express.cookieParser());
app.use(express.session({
secret: 'xxxxxx',
store: new MongoStore({
db: 'dbname',
clear_interval: 3600,
host: 'localhost',
port: 27017
})
}));
Run Code Online (Sandbox Code Playgroud)
登录工作正常,cookie 被删除,会话按预期工作。
我的问题是结束会话。我有一个注销路由,它基本上是这样做的:
req.session.destroy(function() {
// log out code
});
Run Code Online (Sandbox Code Playgroud)
但是在 mongo db.sessions 中,会话仍然存在,并且 sid cookie 仍然保留在用户代理上,因此如果用户在注销后重新访问任何“受保护”的 URL,会话将重新生成。
所以看起来我需要删除cookie或从数据库中删除会话,后者似乎是错误的,所以我试图删除cookie,但没有运气,在Express中尝试过:
req.session.destroy(function() {
res.clearCookie('connect.sid', { path: '/' });
});
Run Code Online (Sandbox Code Playgroud)
并且似乎我无法使用 javascript 删除客户端上的 sid cookie,因为它仅是 http (??) 这不起作用:
document.cookie = 'connect.sid=; path=/; domain=localhost; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
Run Code Online (Sandbox Code Playgroud)
任何想法如何摆脱这个烦人的会话cookie??!
req.session.destroy()应该清除数据库中的会话。
Express 在尝试销毁会话时可能使用不同的会话 ID。确保确实提取了与 中的 id 匹配的Session.prototype.destroy正确内容。this.idmongodb.sessions
我刚刚遇到这个问题,这是因为我向服务器发出的注销用户的请求不包含会话 cookie(已遗漏withCredentials)。
$.ajax({
url: 'http://url/auth/logout',
type: 'GET',
xhrFields: {
withCredentials: true
}
});
Run Code Online (Sandbox Code Playgroud)
这导致 Express 为请求生成一个新的会话 ID,并要求 mongodb 删除具有该新 ID 的会话(保持旧 ID 不变)。