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 中添加 path 和 domain
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?