パーティション分割されていない Cookie からパーティション分割された Cookie への移行

サイトをパーティション分割 Cookie に移行するときに、同じクライアントにパーティション分割された Cookie とパーティション分割されていない Cookie の両方が存在する場合、予期しない動作が発生することがあります。

パーティション化された Cookie を設定しても、同じ名前を持つ既存のパーティション分割されていない Cookie がオーバーライドまたは置換されることはありません。サードパーティ Cookie が有効になっている限り、どちらも別々の Cookie JAR に格納されます。サードパーティ Cookie を無効にすると、パーティション分割された Cookie のみが受け入れられます。両方の Cookie が存在する場合、どちらの Cookie がパーティション分割され、どれがパーティション分割されていないのかをプログラマティックに識別することは不可能であり、予期しない動作が発生する可能性があります。

これに対処するには次の 2 つの方法があります。 1. 置き換える Cookie を期限切れにします。 2. Cookie の名前を変更する

考慮すべきポイント

パーティション化された Cookie に移行する場合は、次の点に注意してください。

  1. Cookie がパーティション分割されているかどうかをプログラマティックに確認する方法はありません。Cookie のパーティション分割状態は Chrome DevTools で確認できます。
  2. パーティション化された Cookie によってパーティション分割されていない Cookie が上書きされることはありません。どちらか一方のみが Partitioned 属性を持つ場合、まったく同じ(つまり、名前、ドメイン、パスなどの属性が同じ)2 つの Cookie は別々の Cookie として扱われます。
  3. 分割された Cookie と分割されていない Cookie の両方が同じネットワーク呼び出しで同じ名前の返されてしまう状況は避けることをおすすめします。

置き換えた Cookie を期限切れにする

サイトまたはサービスが名前の変更に対応できない場合は、既存のパーティション分割されていない Cookie を期限切れにしながら、新しいパーティション化された Cookie を作成できます。Cookie がパーティション分割されているかどうかを判断する方法はありませんが、Partitioned 属性のない Set-Cookie ヘッダーはパーティション分割されていない 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 と分割されていない Cookie で異なる名前を使用することです。たとえば、「example」という名前のパーティション分割されていない Cookie がある場合は、パーティション分割された Cookie に移行できます。

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

Cookie の有効期限はプログラムでは公開されないため、新しい Cookie の有効期限をパーティション分割されていない Cookie の有効期限と一致するように設定することはできません。このプロセス中に Cookie の値を更新することをおすすめします。

パーティション化された Cookie とパーティション分割されていない Cookie の両方を維持する

移行期間中は、2 つの別個の 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 に Partitioned 属性を追加できます。