所以我一直在使用以下代码
设置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.com
和DOMAIN=domain.com
(我也尝试了.domain.com
但也没有用)path
因为快递假定/
如果没有提供 - 无论如何,我这样做是为了排除它,它没有任何区别。localhost:3000
与DOMAIN=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
版本
答案 0 :(得分:0)
express docs状态,“如果给定选项与res.cookie()相同,则不包括expires和maxAge,Web浏览器和其他兼容客户端将仅清除cookie。”
因此我建议你试试:
res.clearCookie(AUTH_TOKEN_NAME, {
domain: DOMAIN,
signed: true,
httpOnly: true
});