12

基本上我正在从 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),小路: '/' });

没有成功。

4

3 回答 3

11

这是 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() });
于 2015-12-08T08:18:03.907 回答
4

这适用于我的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('/');
});
于 2016-12-14T15:36:58.783 回答
2

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

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

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

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

于 2021-01-25T10:58:18.693 回答