node express,如何在注销后清除cookie

时间:2015-08-20 09:36:54

标签: javascript node.js cookies express express-session

基本上我正在从a.example.com重定向到www.example.com,我希望能够在www.example.com上删除cookie(因为cookie是使用.example.com作为cookie域创建的),但以下代码不起作用。

我知道这个问题似乎是重复的问题,我尝试了类似问题的一切,但它不起作用。请参阅代码我已经尝试过的内容

使用express 3.0.3和节点0.10.32。

快速会话中间件

...
var cookiedata = { 
    domain              : '.example.com',
    originalMaxAge      : null,
    httpOnly            : false
};

app.use(express.session({
        store  : ..., 
        secret : ..., 
        key    : 'express.sid', 
        cookie : cookiedata 
}));
...

退出功能

function logout(req, res){
    ...

    req.session.destroy(function(){
        req.session = null;

        res.clearCookie('express.sid', { path: '/' });
        res.redirect('https://www.example.com');

    });
}

我已经尝试过类似问题

  1. https://github.com/strongloop/express/issues/691
  2. 所以我把path : '/'放在快递会话中间件中,例如:

    app.use(express.session({ ..., path : '/' });
    

    没有成功。

    1. https://groups.google.com/forum/#!topic/express-js/PmgGMNOzhgM
      相反res.clearCookie我使用: res.cookie('express.sid','',{expires:new Date(1),path:'/'});
    2. 没有成功。

3 个答案:

答案 0 :(得分:9)

这是Express.JS的response.clearCookie(第749行的文件response.js)。

var opts = merge({ expires: new Date(1), path: '/' }, options);
return this.cookie(name, '', opts);

如果在此行设置断点,您将看到在无效日期报告过期。所以不要使用response.clearCookie,而是让它像这一样立即过期。

response.cookie("express.sid", "", { expires: new Date() });

答案 1 :(得分:2)

这对我来说是cookie-parser模块:

router.get('/logout', function(req, res){
    cookie = req.cookies;
    for (var prop in cookie) {
        if (!cookie.hasOwnProperty(prop)) {
            continue;
        }    
        res.cookie(prop, '', {expires: new Date(0)});
    }
    res.redirect('/');
});

答案 2 :(得分:1)

对我有用的是在 res.clearCookie 中添加 pathdomain

res.clearCookie(<cookie-name>, {path: '/', domain: <domain-on-which-cookie-is-set>}

此外,请确保在前端包含凭据,否则不会随请求发送 cookie。如果没有 cookie 到达服务器,则无需清除!

fetch('url.com', {credentials: "include"}