Transição de cookies não particionados para particionados

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:

  1. 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.
  2. 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.
  3. É 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 o auth-partitioned é aceito.
  • Em clientes que não bloqueiam cookies de terceiros, independentemente de serem compatíveis com CHIPS: auth e auth-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.