從未分區改用分區 Cookie

將網站轉換為分區 Cookie 時,如果任何指定用戶端中同時有名稱相同的分區和未分區 Cookie,就可能會發生非預期的行為。

設定分區 Cookie 不會覆寫或取代名稱相同的現有未分區 Cookie。只要啟用第三方 Cookie,但這兩者都會留存在獨立的 Cookie jar 中。停用第三方 Cookie 時,系統只會接受分區 Cookie。如果同時找到兩個 Cookie,就無法透過程式輔助方式分辨哪個 Cookie 已分區或未分區,這可能會導致非預期的行為。

解決方法有兩種: 1. 把內含的 Cookie 失效 2. 重新命名 Cookie

重要考量事項

改用分區 Cookie 時,請注意下列事項:

  1. 無法透過程式判斷 Cookie 是否分區或未分區。不過,您可以在 Chrome 開發人員工具中確定 Cookie 的分區狀態。
  2. 分區 Cookie 不會覆寫未分區的 Cookie,這指的是完全相同 (也就是說,具有相同名稱、網域或路徑等相同屬性) 的 Cookie,如果只有一個 Cookie 具有 Partitioned 屬性,系統就會將這些 Cookie 視為個別的 Cookie。
  3. 建議您避免在相同的網路呼叫中,同時擁有分區 Cookie 與未分區 Cookie,並以相同名稱傳回。

使你要替換的 Cookie 失效

如果您的網站或服務無法因應名稱變更,您可以在在過期現有未分區 Cookie 時建立新的分區 Cookie。雖然無法判斷 Cookie 是否分區,但不含 Partitioned 屬性的 Set-Cookie 標頭不會影響未分區的 Cookie。

以下範例說明如何讓名為 example 的未分區 Cookie 過期,讓所有分區 Cookie 不受影響,即使分區 Cookie 名稱相同也一樣。如果已有名為 cookieName 的新分區 Cookie,系統會新增或更新該 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:一個已分區,另一個則未同步的 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。