Transisi dari cookie yang tidak dipartisi ke cookie yang dipartisi

Saat mentransisikan situs ke cookie yang dipartisi, Anda mungkin mengalami perilaku yang tidak terduga jika cookie yang dipartisi dan tidak dipartisi dengan nama yang sama ada untuk klien tertentu.

Menetapkan cookie yang dipartisi tidak akan mengganti atau menggantikan cookie yang sudah ada dan tidak dipartisi dengan nama yang sama. Keduanya akan ada, selama cookie pihak ketiga diaktifkan, tetapi dalam cookie jar terpisah. Jika cookie pihak ketiga dinonaktifkan, hanya cookie hasil partisi yang akan diterima. Jika kedua cookie tersebut ada, Anda tidak dapat secara terprogram mengetahui cookie mana yang dipartisi dan mana yang tidak, dan hal ini dapat menyebabkan perilaku yang tidak terduga.

Ada dua opsi untuk mengatasi hal ini: 1. Mengakhiri cookie yang diganti 2. Mengganti nama cookie

Pertimbangan utama

Saat Anda bertransisi ke cookie yang dipartisi, perhatikan hal-hal berikut:

  1. Tidak ada cara untuk menentukan secara terprogram apakah cookie yang dikirim dalam permintaan HTTP telah dipartisi atau tidak dipartisi. Namun, Anda dapat menentukan status partisi cookie di Chrome DevTools. Anda dapat membedakan antara cookie yang dipartisi dan tidak dipartisi yang tidak memiliki atribut HttpOnly dengan menggunakan CookieStore API.
  2. Cookie yang dipartisi tidak menimpa cookie yang tidak dipartisi—dua cookie yang sama persis (yaitu, memiliki atribut yang sama seperti nama, domain, atau jalur) akan diperlakukan sebagai cookie terpisah jika hanya satu yang memiliki atribut Partitioned.
  3. Sebaiknya hindari situasi di mana Anda memiliki cookie yang dipartisi dan cookie yang tidak dipartisi dengan nama yang sama ditampilkan dalam panggilan jaringan yang sama.

Akhiri cookie yang Anda ganti

Jika situs atau layanan Anda tidak dapat mengakomodasi perubahan nama, Anda dapat membuat cookie yang dipartisi baru sekaligus menghentikan cookie yang tidak dipartisi yang ada. Meskipun tidak ada cara untuk menentukan apakah cookie dipartisi atau tidak, header Set-Cookie dengan atribut Partitioned tidak akan memengaruhi cookie yang tidak dipartisi.

Contoh berikut menunjukkan cara menghentikan cookie yang tidak dipartisi yang disebut example dan membiarkan cookie yang dipartisi tidak terpengaruh, meskipun memiliki nama yang sama. Cookie yang dipartisi baru yang disebut cookieName akan ditambahkan atau diperbarui jika sudah ada.

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

Mengganti nama cookie

Cara paling andal untuk memastikan bahwa ada transisi yang lancar adalah dengan menggunakan nama yang berbeda untuk cookie yang dipartisi dan tidak dipartisi. Misalnya, jika Anda memiliki cookie yang tidak dipartisi bernama "contoh", Anda dapat memigrasikannya ke cookie yang dipartisi.

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

Karena masa berlaku cookie tidak diekspos secara terprogram, tidak ada cara untuk menetapkan masa berlaku cookie baru agar bertepatan dengan masa berlaku cookie yang tidak dipartisi. Sebaiknya perbarui nilai cookie selama proses ini.

Pertahankan cookie yang dipartisi dan tidak dipartisi

Selama periode transisi, pertimbangkan untuk mempertahankan dua cookie yang disinkronkan secara terpisah: satu yang dipartisi dan satu yang tidak. Misalnya, Anda mungkin memiliki cookie auth dan auth-partitioned, dengan cookie auth-partitioned ditetapkan dengan atribut Partitioned.

Setiap kali nilai diperbarui, Anda harus mencoba menetapkan kedua cookie.

  • Pada klien yang memblokir cookie pihak ketiga, tetapi belum mendukung CHIPS: tidak ada cookie yang akan diterima.
  • Pada klien yang memblokir cookie pihak ketiga dan mendukung CHIPS: cookie auth akan ditolak, tetapi cookie auth-partitioned akan diterima.
  • Pada klien yang tidak memblokir cookie pihak ketiga, terlepas dari apakah klien tersebut mendukung CHIPS: auth dan auth-partitioned diterima.

Saat aplikasi Anda perlu membaca cookie autentikasi, Anda harus mencari auth-partitioned terlebih dahulu. Namun, jika Anda harus me-roll back perubahan untuk sementara, Anda dapat kembali untuk mencari cookie auth.

Setelah Anda menetapkan bahwa sebagian besar pengguna telah memperbarui cookie mereka, cookie auth-partitioned dapat dihentikan dan atribut yang dipartisi dapat ditambahkan ke cookie autentikasi reguler.