销毁cookie NodeJs

时间:2015-01-16 07:04:50

标签: node.js cookies

我正在使用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。

任何建议都将不胜感激。

12 个答案:

答案 0 :(得分:66)

对于webapp,您只需将cookie设置为响应:

res.cookie("key", value);

并删除co​​okie:

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)

我已经尝试了所有的解决方案,但在我找到这个解决方案之前都没有奏效。

  1. 我这样设置我的 cookie:
res.writeHead(200, {
   "Set-Cookie": `token=${accessToken}; HttpOnly; path=/`,
   "Access-Control-Allow-Credentials": "true",
});

res.end();
  1. 然后像这样销毁它:
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 });