Ao fazer a transição do seu site para cookies particionados, você poderá encontrar um comportamento inesperado se um cookie particionado e não particionado com os mesmos nomes estiverem presentes para qualquer cliente.
Definir um cookie particionado não substitui um cookie atual não particionado com o mesmo nome. Ambos vão existir, desde que os cookies de terceiros estejam ativados, mas em potes separados. Quando os cookies de terceiros são desativados, apenas o particionado é aceito. Se ambos os cookies estiverem presentes, não será possível dizer programaticamente qual deles é particionado e qual não é, o que pode levar a um comportamento inesperado.
Há duas opções possíveis para resolver esse problema: 1. Expirar o cookie que você está substituindo 2. Renomear os cookies
Principais considerações
Ao fazer a transição para cookies particionados, tenha em mente o seguinte:
- Não é possível determinar de maneira programática se um cookie enviado em uma solicitação HTTP está particionado ou não. No entanto, é possível determinar o estado particionado de um cookie no Chrome DevTools. É possível distinguir entre cookies particionados e não particionados que não têm o atributo
HttpOnly
usando a API CookieStore. - Os cookies particionados não substituem os cookies não particionados. Dois cookies
exatamente iguais (ou seja, com os mesmos atributos, como nome, domínio ou caminho)
serão tratados como cookies separados se apenas um tiver o atributo
Partitioned
. - É melhor evitar uma situação em que você tenha um cookie particionado e um cookie não particionado com o mesmo nome sendo retornado na mesma chamada de rede.
Expirar os cookies que você está substituindo
Se o site ou serviço não puder acomodar uma mudança de nome, crie um novo cookie particionado enquanto expira o cookie não particionado atual. Não
há como determinar se um cookie é particionado, mas os cabeçalhos Set-Cookie
com um atributo Partitioned
não afetam os cookies que não são particionados.
O exemplo a seguir mostra como expirar o cookie não particionado chamado example
e deixar os cookies particionados sem impacto, mesmo que tenham o mesmo nome. Um novo
cookie particionado chamado cookieName
será adicionado ou atualizado se ele já
existir.
Set-Cookie: example=-1;HttpOnly;SameSite=None;Secure;Max-Age:0
Set-Cookie: cookieName=value;Secure;SameSite=None;MaxAge=34560000;Partitioned
Renomear cookies
A maneira mais robusta de garantir uma transição perfeita é usar nomes diferentes para cookies particionados e não particionados. Por exemplo, se você tiver um cookie não particionado chamado "example", poderá migrá-lo para um cookie particionado.
Set-Cookie: example-partitioned=value;Secure;SameSite=None;MaxAge=34560000;Partitioned
Como a expiração do cookie não é exposta de forma programática, não é possível definir que a expiração do novo cookie coincida com a expiração do cookie não particionado. Pode ser prático atualizar o valor do cookie durante esse processo.
Manter cookies particionados e não particionados
Durante o período de transição, mantenha dois cookies sincronizados separados:
um particionado e outro não particionado. Por exemplo, você pode ter cookies
auth
e auth-partitioned
, em que o último foi definido com o
atributo Partitioned
.
Sempre que o valor for atualizado, tente definir os dois cookies.
- Em clientes que bloqueiam cookies de terceiros, mas ainda não são compatíveis com o CHIPS: nenhum cookie será aceito.
- Em clientes que bloqueiam cookies de terceiros e aceitam CHIPS: o cookie
auth
é rejeitado, mas oauth-partitioned
é aceito. - Em clientes que não bloqueiam cookies de terceiros, independentemente de serem compatíveis com CHIPS:
auth
eauth-partitioned
são aceitos.
Quando seu aplicativo precisar ler o cookie de autenticação, procure auth-partitioned
primeiro. No entanto, se você precisar reverter temporariamente a alteração, poderá voltar a procurar o cookie auth
.
Depois de estabelecer que a maioria dos usuários teve
os cookies atualizados, o cookie auth-partitioned
pode ser desativado e o
atributo particionado pode ser adicionado ao cookie de autenticação normal.