销毁 cookie NodeJs
Destroy cookie NodeJs
我正在使用 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。
如有任何建议,我们将不胜感激。
根据 HTTP 规范,无法删除 cookie。要有效 "delete" 一个 cookie,您可以将过期日期设置为过去的某个日期。本质上,这将为您带来以下结果(根据 cookies 模块文档):
cookies.set('testtoken', {maxAge: 0});
或者根据 HTTP 规范:
cookies.set('testtoken', {expires: Date.now()});
两者都应该有效。您可以将 Date.now()
替换为 new Date(0)
以获得真正的旧日期。
对于 webapp,您只需将 cookie 设置为响应即可:
res.cookie("key", value);
并删除 cookie:
参考:https://expressjs.com/en/api.html#res.clearCookie
res.clearCookie("key");
别忘了:
res.end()
避免网络请求挂起。
我将其与 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('/');
});
要删除任何 http cookie,如果我们只是试图从响应中清除它 [使用 res.clearCookie("key")
],那肯定不会起作用。实际上,要删除http cookie,域和路径非常重要。
域名和路径定义了cookie的范围。从表面上看,它们实质上是告诉浏览器该 cookie 属于哪个网站。
发送相同的 cookie 值; expires appended 也是一个坏主意,因为你希望内容被销毁,但这不会发生。
最好的办法是通过将值设置为空来使 cookie 无效,并包括一个过期字段,如下所示:
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: '/' });
希望对您有所帮助!!!
虽然另一个答案是正确的,但从 express.js 网络应用程序中删除 cookie 是通过调用以下方法完成的:
res.clearCookie("key");
但有一个警告!
您的 cookie 选项(过期除外)需要与您设置时相同。否则浏览器将不会删除 cookie。所以使用相同的域、安全设置等(参考:https://expressjs.com/en/4x/api.html#res.clearCookie)
我也在使用 cookie-parser
,上面的答案让我找到了解决方案。就我而言,我还需要添加 overwrite: true
,否则会添加新的 cookie 密钥。
所以我的最终解决方案如下:
res.cookie('cookieName', '', {
domain: 'https://my.domain.com',
maxAge: 0,
overwrite: true,
});
几天前我遇到了同样的问题。和朋友讨论后,我认为这是最好的解决方案。
res.setHeader('set-cookie', 'mycookie=; max-age=0');
优点:
- 只使用节点
- 简单易懂
学分:@andy
在生产中使用 SSL 时,您需要指定域。这个域必须和那个域一一对应,就是用来存放cookie的!
例如:
res.clearCookie('sid', {domain: ".somedomain"})
最好的方法
在你设置喜欢的标记之前,你应该先删除它
像那样
res.clearCookie('token');
res.cookie('token',token, { maxAge: 900000, httpOnly: true });
我已经尝试了所有的解决方案,并且 none 找到了这个解决方案。
- 我这样设置我的 cookie:
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();
另一种从服务器销毁 cookie 的方法。只需将负整数设置为 maxAge。还有一点要记住,不要忘记在设置或销毁 cookie 时设置路径。
我正在使用 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。
如有任何建议,我们将不胜感激。
根据 HTTP 规范,无法删除 cookie。要有效 "delete" 一个 cookie,您可以将过期日期设置为过去的某个日期。本质上,这将为您带来以下结果(根据 cookies 模块文档):
cookies.set('testtoken', {maxAge: 0});
或者根据 HTTP 规范:
cookies.set('testtoken', {expires: Date.now()});
两者都应该有效。您可以将 Date.now()
替换为 new Date(0)
以获得真正的旧日期。
对于 webapp,您只需将 cookie 设置为响应即可:
res.cookie("key", value);
并删除 cookie: 参考:https://expressjs.com/en/api.html#res.clearCookie
res.clearCookie("key");
别忘了:
res.end()
避免网络请求挂起。
我将其与 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('/');
});
要删除任何 http cookie,如果我们只是试图从响应中清除它 [使用 res.clearCookie("key")
],那肯定不会起作用。实际上,要删除http cookie,域和路径非常重要。
域名和路径定义了cookie的范围。从表面上看,它们实质上是告诉浏览器该 cookie 属于哪个网站。 发送相同的 cookie 值; expires appended 也是一个坏主意,因为你希望内容被销毁,但这不会发生。
最好的办法是通过将值设置为空来使 cookie 无效,并包括一个过期字段,如下所示:
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: '/' });
希望对您有所帮助!!!
虽然另一个答案是正确的,但从 express.js 网络应用程序中删除 cookie 是通过调用以下方法完成的:
res.clearCookie("key");
但有一个警告!
您的 cookie 选项(过期除外)需要与您设置时相同。否则浏览器将不会删除 cookie。所以使用相同的域、安全设置等(参考:https://expressjs.com/en/4x/api.html#res.clearCookie)
我也在使用 cookie-parser
,上面的答案让我找到了解决方案。就我而言,我还需要添加 overwrite: true
,否则会添加新的 cookie 密钥。
所以我的最终解决方案如下:
res.cookie('cookieName', '', {
domain: 'https://my.domain.com',
maxAge: 0,
overwrite: true,
});
几天前我遇到了同样的问题。和朋友讨论后,我认为这是最好的解决方案。
res.setHeader('set-cookie', 'mycookie=; max-age=0');
优点:
- 只使用节点
- 简单易懂
学分:@andy
在生产中使用 SSL 时,您需要指定域。这个域必须和那个域一一对应,就是用来存放cookie的!
例如:
res.clearCookie('sid', {domain: ".somedomain"})
最好的方法
在你设置喜欢的标记之前,你应该先删除它 像那样
res.clearCookie('token');
res.cookie('token',token, { maxAge: 900000, httpOnly: true });
我已经尝试了所有的解决方案,并且 none 找到了这个解决方案。
- 我这样设置我的 cookie:
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();
另一种从服务器销毁 cookie 的方法。只需将负整数设置为 maxAge。还有一点要记住,不要忘记在设置或销毁 cookie 时设置路径。