我们使用 Clear-Site-Data 标头来清除注销时的 Cookie 和其他数据。
如果此标头与 https://example.com/clear-cookies 处的响应一起传递,则同一域 https://example.com 和任何子域(例如 https://stage .example.com等),将被清除。
如果其他系统在子域上运行,这就是一个问题。
我还想知道“example.co.uk”等域名会发生什么 - 这是否意味着所有英国公司域名的所有数据都被清除?
浏览器如何确定要清除哪些域?还有会受影响吗?
我们想在
oursystem.example.org
上使用它,以便它仅清除 oursystem.example.org
而不是 othersystem.example.org
删除整个域的所有 cookie 符合清除站点数据规范。我认为这应该在标头值的一般描述中更加清楚,但是如果您继续阅读清除 cookie 的详细算法(第 4.2.4 节),它会说:
我们删除整个“注册域”的所有 Cookie,因为 Cookie 会忽略同源策略,并且如果我们只清除特定子域的 Cookie,则存在明显的风险,即我们会使应用程序处于不明确的状态。例如,考虑
accounts.google.com
与,两者都具有表示用户登录状态的 cookie。 现在,你也在问:mail.google.com
我还想知道像“example.co.uk”这样的域名会发生什么 - 这是否意味着所有英国公司域名的所有数据都被清除?
这里的关键短语是“注册域名”。对于像
co.uk
这样的二级域来说,确定其开始和结束并不总是显而易见的。然而,这就是
公共后缀列表的用途,规范也引用它来定义“注册域”。 cookie 清除算法的第一步是:
令cookie 列表registered
规范随后描述了如何删除完整的- 为 origin 的 host 的 注册域名。 令
cookie list- 为来自 cookie store 的 cookie 集合,其
domain
属性是带有registered的 domain-match。
。 基于 Chrome 的浏览器似乎正在实现该算法。 Firefox 似乎以不同的方式处理它,即仅删除主机域及其子域的 cookie。 Safari
根本不实现 Clear-Site-Data: "cookies"
(截至 2024 年)。
虽然我同意这种行为可能很烦人,并且我不完全同意其背后的原因,但我认为没有直接的方法可以影响它。