node express,注销后如何清除cookie

Posted

技术标签:

【中文标题】node express,注销后如何清除cookie【英文标题】:node express, how to clear cookie after log out 【发布时间】: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');

    );

我已经尝试过类似问题

    https://github.com/strongloop/express/issues/691

所以我把path : '/' 放在快速会话中间件中,例如:

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

没有成功。

    https://groups.google.com/forum/#!topic/express-js/PmgGMNOzhgM 相反 res.clearCookie 我使用了: res.cookie('express.sid', '', expires: new Date(1), path: '/' );

没有成功。

【问题讨论】:

您找到解决方案了吗?这里没有接受的答案。 【参考方案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 一起使用

以上是关于node express,注销后如何清除cookie的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node express 中实现 JWT(JsonWebToken) 注销

如何使用 Apollo Server 清除设置的 cookie

浏览历史记录清除网页后注销[重复]

如何通过express-session在node.js上设置持久性cookie?

如何从 Facebook 注销或清除 WebAuthenticationBroker 上的 cookie?

注销后 Cookie 会话不会失效