我正在使用Cookies模块来设置cookie。以下是我的代码:
var options = {
maxAge: ALMOST_ONE_HOUR_MS,
domain: '.test.com',
expires: new Date(Date.now() + ALMOST_ONE_HOUR_MS)
};
var value = userInfo.token;
cookies.set("testtoken", value, options);
但是在文档中我还没有找到如何销毁这个cookie。
任何建议都将不胜感激。
答案 0 :(得分:66)
对于webapp,您只需将cookie设置为响应:
res.cookie("key", value);
并删除cookie:
res.clearCookie("key");
答案 1 :(得分:16)
根据HTTP规范无法删除cookie。有效地"删除" Cookie,您将过期日期设置为过去的某个日期。从本质上讲,这将导致以下内容(根据cookie模块文档):
cookies.set('testtoken', {maxAge: Date.now()});
或者根据HTTP规范:
cookies.set('testtoken', {expires: Date.now()});
两者都应该有效。您可以将Date.now()
替换为new Date(0)
以获取真正的旧日期。
答案 2 :(得分:7)
如果我们只是尝试从响应[使用res.clearCookie("key")
]清除它,要删除任何http cookie,它绝对不会起作用。实际上,要删除http cookie,域和路径都非常重要。
域和路径定义cookie的范围。从表面上看,他们基本上会告诉浏览器cookie属于哪个网站。 发送相同的cookie值; expires附加也是一个坏主意,因为你想要销毁内容,但这不会发生。
最好的想法是通过将值设置为空来使cookie无效并包含一个expires字段,如下所示:
res.cookie("key","empty the key content", {expires:old date, domain:'.example.com', path:'/'});
res.cookie("token", "", { expires: new Date(0),domain:'.test.com', path: '/' });
希望这有帮助!!!
答案 3 :(得分:6)
我在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('/');
});
答案 4 :(得分:5)
虽然另一个答案是正确的,但是通过调用以下方法来删除express.js webapp中的cookie:
res.clearCookie("key");
您的Cookie选项(过期除外)需要与设置时相同。否则浏览器不会删除cookie。因此,请使用相同的域名,安全设置等(参考:https://expressjs.com/en/4x/api.html#res.clearCookie)
答案 5 :(得分:0)
我也使用cookie-parser
,上面的答案将我引向解决方案。就我而言,我还需要添加overwrite: true
,否则就添加了新的Cookie密钥。
所以我的最终解决方案如下:
res.cookie('cookieName', '', {
domain: 'https://my.domain.com',
maxAge: 0,
overwrite: true,
});
答案 6 :(得分:0)
几天前,我遇到了同样的问题。与朋友讨论之后,我认为这是最好的解决方案。
res.setHeader('set-cookie', 'mycookie=; max-age=0');
优势:
积分:@andy
答案 7 :(得分:0)
res.clelarCookie('cookieName')
是最好的选择,但以防万一,您还可以使Cookie无效:
router.get('/logout', function (req, res, next) {
res.cookie('jwt', {}, {maxAge: -1});
res.redirect('/')
});
答案 8 :(得分:0)
我已经尝试了所有的解决方案,但在我找到这个解决方案之前都没有奏效。
res.writeHead(200, {
"Set-Cookie": `token=${accessToken}; HttpOnly; path=/`,
"Access-Control-Allow-Credentials": "true",
});
res.end();
res.writeHead(200, {
"Set-Cookie": `token=; HttpOnly; path=/; max-age=0`,
});
res.end();
答案 9 :(得分:0)
另一种从服务器销毁 cookie 的方法。只需将负整数设置为 maxAge。还有一点要记住,不要忘记设置一个路径,什么时候设置或销毁 cookie。
答案 10 :(得分:-1)
在生产中使用 SSL 时,您需要指定域。这个域必须与用于存储cookie的域相对应!
例如:
res.clearCookie('sid', {domain: ".somedomain"})
答案 11 :(得分:-1)
最好的方法
在你设置喜欢的令牌之前,你应该先删除它 就这样
res.clearCookie('token');
res.cookie('token',token, { maxAge: 900000, httpOnly: true });