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

サイトをパーティショニング Cookie に移行する際に、特定のクライアントに同じ名前のパーティショニング Cookie とパーティショニングされていない Cookie の両方がある場合、予期しない動作が発生することがあります。

パーティション分割された Cookie を設定しても、同じ名前のパーティション分割されていない既存の Cookie がオーバーライドされたり、置き換えられたりすることはありません。サードパーティ Cookie が有効になっている限り、どちらも存在しますが、別々の Cookie ジャーに保存されます。サードパーティ Cookie が無効になっている場合は、パーティション分割された Cookie のみが受け入れられます。両方の Cookie が存在する場合、どちらがパーティショニングされているか、されていないかをプログラムで判断することはできません。これにより、予期しない動作が発生する可能性があります。

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

考慮すべきポイント

パーティション分割 Cookie に移行する際は、次の点に注意してください。

  1. HTTP リクエストで送信される Cookie がパーティション分割されているかどうかをプログラムで判断する方法はありません。ただし、Chrome DevTools では Cookie のパーティショニング状態を確認できます。HttpOnly 属性のないパーティション化された Cookie とパーティション化されていない Cookie を区別するには、CookieStore API を使用します。
  2. パーティション分割された Cookie は、パーティション分割されていない Cookie を上書きしません。Partitioned 属性を持つ Cookie が 1 つだけの場合、まったく同じ(つまり、名前、ドメイン、パスなどの属性が同じ)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 の両方を保持する

移行期間中は、パーティション分割された Cookie と分割されていない 2 つの 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 を廃止し、Partitioned 属性を通常の認証 Cookie に追加できます。