Quando esegui la transizione del tuo sito ai cookie partizionati, potresti riscontrare comportamenti imprevisti se sono presenti sia un cookie partizionato che un cookie non partizionato con gli stessi nomi per un determinato client.
L'impostazione di un cookie partizionato non sostituisce o sostituisce un cookie non partizionato esistente con lo stesso nome. Saranno disponibili entrambi, purché i cookie di terze parti sono abilitati, ma in contenitori di cookie separati. Quando i cookie di terze parti sono disabilitati, verrà accettato solo quello partizionato. Se sono presenti entrambi i cookie, non è possibile in modo programmatico stabilire quale partizionamento e quale no, il che può portare a comportamenti imprevisti.
Esistono due possibili soluzioni per risolvere questo problema: 1. Fai scadere il cookie che stai sostituendo 2. Rinominare i cookie
Considerazioni principali
Quando passi ai cookie partizionati, tieni presente quanto segue:
- Non è possibile determinare in modo programmatico se un cookie è partizionato o non partizionato. Tuttavia, puoi determinare lo stato partizionato di un cookie in Chrome DevTools.
- I cookie partizionati non sovrascrivono quelli non partizionati. Due cookie esattamente uguali (ossia, con gli stessi attributi, come nome, dominio o percorso) verranno trattati come cookie separati se solo uno ha l'attributo
Partitioned
. - È preferibile evitare che, nella stessa chiamata di rete, vengano restituiti sia un cookie partizionato che un cookie non partizionato con lo stesso nome.
Fai scadere i cookie che stai sostituendo
Se il tuo sito o servizio non è in grado di modificare il nome, puoi creare un
nuovo cookie partizionato e far scadere il cookie non partizionato esistente. Sebbene non sia possibile determinare se un cookie è partizionato o meno, le intestazioni Set-Cookie
senza un attributo Partitioned
non influiscono sui cookie non partizionati.
L'esempio seguente mostra come far scadere il cookie non partizionato denominato example
e lasciare invariati i cookie partizionati, anche se hanno lo stesso nome. Se esiste già, verrà aggiunto o aggiornato un nuovo
cookie partizionato denominato cookieName
.
Set-Cookie: example=-1;HttpOnly;SameSite=None;Secure;Max-Age:0
Set-Cookie: cookieName=value;Secure;SameSite=None;MaxAge=34560000;Partitioned
Rinominare i cookie
Il modo più sicuro per garantire una transizione senza interruzioni è utilizzare nomi diversi per i cookie partizionati e non partizionati. Ad esempio, se hai un cookie non partizionato denominato "example", puoi eseguirne la migrazione in un cookie partizionato.
Set-Cookie: example-partitioned=value;Secure;SameSite=None;MaxAge=34560000;Partitioned
Poiché la scadenza del cookie non viene esposta in modo programmatico, non è possibile impostare la scadenza del nuovo cookie in modo che coincida con quella del cookie non partizionato. Durante questa procedura, potrebbe essere pragmatico aggiornare il valore del cookie.
Mantieni i cookie partizionati e non partizionati
Durante il periodo di transizione, valuta la possibilità di mantenere due cookie sincronizzati separati:
uno partizionato e l'altro no. Ad esempio, potresti avere entrambi i cookie
auth
e auth-partitioned
, dove il secondo è stato impostato con
l'attributo Partitioned
.
Ogni volta che il valore viene aggiornato, devi provare a impostare entrambi i cookie.
- Sui client che bloccano i cookie di terze parti, ma non supportano ancora i CHIPS: nessun cookie sarà accettato.
- Sui client che bloccano i cookie di terze parti e supportano i CHIPS: il cookie
auth
viene rifiutato, ma il cookieauth-partitioned
viene accettato. - Sui client che non bloccano i cookie di terze parti, indipendentemente dal fatto che
supportino i CHIPS, sono accettati sia
auth
siaauth-partitioned
.
Quando la tua applicazione deve leggere il cookie di autenticazione, dovresti cercare prima auth-partitioned
; ma se devi eseguire temporaneamente il rollback della modifica, puoi tornare alla ricerca del cookie auth
.
Dopo aver verificato che la maggior parte degli utenti ha aggiornato i cookie, il cookie auth-partitioned
può essere ritirato e l'attributo partizionato può essere aggiunto al normale cookie di autorizzazione.