【问题标题】:node express, how to clear cookie after log outnode express,注销后如何清除cookie
【发布时间】:2015-11-13 21:18:00
【问题描述】:

基本上,我正在从 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

所以我把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: '/' });

没有成功。

【问题讨论】:

  • 您找到解决方案了吗?这里没有接受的答案。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 但它并没有完全从浏览器中删除cookie
  • 不仅没有删除它,甚至没有更新它
【解决方案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('/');
});

【讨论】:

    【解决方案3】:

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

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

    另外,请确保在前端包含凭据,否则不会随请求发送任何 cookie。如果没有 cookie 进入服务器,它就没有什么要清除的了!

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

    【讨论】:

    • 在我的一生中,我无法让它与 POST 或 PUT 一起使用,而只能与 GET 一起使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2016-01-11
    • 2019-07-31
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多