从未分区 Cookie 转换为分区 Cookie

为网站改用分区 Cookie 时,您可能会遇到以下情况: 如果分区和未分区 Cookie 具有相同的位置,则会出现意外行为 名称。

设置分区 Cookie 不会替换或替换现有 具有相同名称的未分区 Cookie。两者存在,前提是第三方 Cookie 已启用,但保存在单独的 Cookie 罐中。当第三方 Cookie 被 则系统仅接受分区分区。如果这两个 Cookie 都 因此无法以编程方式分辨哪个是已分区的, 否则可能会导致意外行为。

您可以通过两种方法解决此问题: 1.让要替换的 Cookie 失效 2.重命名 Cookie

主要注意事项

在改用分区 Cookie 时,请注意以下几点:

  1. 无法以程序化方式确定 或未分区不过,您可以确定 Cookie 的分区状态。
  2. 分区 Cookie 不会覆盖未分区的 Cookie - 两个 Cookie 完全相同(即具有相同的属性,如名称、域名或路径) 如果只有一个 Cookie 具有 Partitioned 属性,则系统会将前者视为单独的 Cookie。
  3. 最好避免同时具有分区 和 Cookie 以及 同一网络调用。

让要替换的 Cookie 失效

如果您的网站或服务无法适应名称的变更,您可以创建一个 新的分区 Cookie,但现有的未分区 Cookie 会过期。虽然 无法确定是否对 Cookie 进行了分区,Set-Cookie 不包含 Partitioned 属性的标头不会影响未分区的 Cookie。

以下示例展示了如何使名为 example 的未分区 Cookie 失效,并使所有已分区 Cookie 不受影响,即使它们具有相同的名称也是如此。一种新的 将添加或更新名为 cookieName 的分区 Cookie(如果已设置) 存在。

Set-Cookie: example=-1;HttpOnly;SameSite=None;Secure;Max-Age:0
Set-Cookie: cookieName=value;Secure;SameSite=None;MaxAge=34560000;Partitioned

重命名 Cookie

确保顺畅转换的最可靠方法是使用 为分区和未分区 Cookie 指定不同的名称。例如,如果 您有一个名为“example”的未分区 Cookie,可以将其迁移到 分区 Cookie。

Set-Cookie: example-partitioned=value;Secure;SameSite=None;MaxAge=34560000;Partitioned

由于 Cookie 的有效期没有以编程方式公开,因此 设置新 Cookie 的有效期,使其与未分区 Cookie 的有效期。刷新 Cookie 的值可能比较实用 。

维护已分区和未分区的 Cookie

在过渡期间,不妨考虑保留两个单独的同步 Cookie: 一个是已分区的,另一个不是例如,您可以同时设置 authauth-partitioned Cookie,其中后者通过 Partitioned 属性。

每次更新该值时,您都应该尝试同时设置这两个 Cookie。

  • 对于拦截第三方 Cookie 但尚不支持 CHIPS 的客户端: 两个 Cookie 都不会被接受
  • 对于阻止第三方 Cookie 并支持 CHIPS 的客户端:auth Cookie 会被拒绝,但 auth-partitioned 个 Cookie 会被接受。
  • 在不会阻止第三方 Cookie 的客户端上(不管是 它们支持 CHIPS:authauth-partitioned 都被接受。

当您的应用需要读取身份验证 Cookie 时,您应该查看 auth-partitioned;但如果您必须暂时回滚 您可以回退到查找 auth Cookie。

在您确定大部分用户都使用过 其 Cookie 被刷新后,auth-partitioned Cookie 可能会被停用,而 可以将分区属性添加到常规身份验证 Cookie 中。