【发布时间】:2021-03-10 06:51:30
【问题描述】:
我在这里疯了 - 我正在研究一个问题,即我拥有的应用程序中的某些注销功能无法正常工作,因为身份验证 cookie 没有被清除。问题是我们的“signout”端点确实在响应中包含了适当的set-cookie 标头——这就是我在 Firefox 中看到的原始响应:
set-cookie: Auth.myapp=; domain=app.mydomain.com; expires=Thu, 26-Nov-2020 13:19:20 GMT; path=/; secure; HttpOnly
Firefox 在控制台中报告此错误:
Cookie “Auth.myapp”已被拒绝,因为它已经过期了
这有点令人困惑,我之前不仅成功地使用了set-cookie 和expires 中的过去日期,它甚至被编入RFC6265 作为请求客户端删除cookie 的可接受方式:
最后,为了移除一个cookie,服务器返回一个Set-Cookie header 过期日期在过去。服务器会成功 仅当 Path 和 Domain 属性在 Set-Cookie 标头匹配 cookie 时使用的值 已创建。
所以我需要在过去设置一个 expires 日期来清除 cookie ...但是这样做会导致浏览器拒绝它?有谁知道这里发生了什么?
为了清楚起见,我检查了 cookie 名称、路径、secure 和 SameSite 是否匹配(更新:我怀疑因为我没有明确指定 SameSite 这可能是原因,但在确保cookie 已使用SameSite=None 设置和清除,但仍无法正常工作)。
【问题讨论】:
-
这里可能涉及不同的子域(例如一个请求没有,一个请求)?
-
不错的建议,但这都在同一个子域上