Set-Cookie标头不再删除Cookie

时间:2018-02-25 13:34:21

标签: node.js express cookies browser

所以我一直在使用以下代码

设置Cookie

res.cookie(AUTH_TOKEN_NAME, token, {
  maxAge: AUTH_TOKEN_EXP,
  domain: DOMAIN,
  signed: true,
  httpOnly: true
});

过期Cookie

res.clearCookie(AUTH_TOKEN_NAME);
res.redirect(303, '/');

然而,它一直运行良好,但是,仅在刚刚部署到生产之后,此代码已停止工作。注意事项:

  • 代码从子域运行,例如x.domain.comDOMAIN=domain.com(我也尝试了.domain.com但也没有用)
  • 回复中的标题 (见下文)
  • 我没有明确设置path因为快递假定/如果没有提供 - 无论如何,我这样做是为了排除它,它没有任何区别。
  • 不是特定于浏览器,我没有在每个浏览器上尝试过,但Chrome或Safari上的行为是相同的......
  • 在本地工作,即localhost:3000DOMAIN=localhost
  • 一起运行

我不认为这是一个Express问题,因为它似乎正在做它的工作,它似乎似乎问题在于浏览器,但它在本地工作的事实与我所做的相矛盾得出的结论是与Express有关。

重新部署node_modules,双重检查版本等(无论如何我都使用锁定文件)并且无法完全了解正在发生的事情。

HTTP请求

GET /logout HTTP/1.1
Host: x.domain.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://x.domain.com/
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,da;q=0.7
Cookie: auth_token=xxxxxx

HTTP响应

HTTP/1.1 303 See Other
Content-Length: 50
Content-Type: text/html; charset=utf-8
Location: /
Vary: Accept
Server: Microsoft-IIS/10.0
Set-Cookie: auth_token=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT
X-Powered-By: Express
X-Powered-By: ASP.NET
Date: Sun, 25 Feb 2018 13:24:01 GMT

版本

  • 节点: 8.1.4
  • 快递: 4.16.2

1 个答案:

答案 0 :(得分:0)

express docs状态,“如果给定选项与res.cookie()相同,则不包括expires和maxAge,Web浏览器和其他兼容客户端将仅清除cookie。”

因此我建议你试试:

res.clearCookie(AUTH_TOKEN_NAME, {
  domain: DOMAIN,
  signed: true,
  httpOnly: true
});