如何删除快递会话cookie

时间:2014-03-12 11:09:47

标签: mongodb session cookies express

我正在使用快速会话和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 ??!

1 个答案:

答案 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不变)。