Glossário

Como um atributo ausente decide cookie de sessão vs cookie persistente

Taras Shynkarenko
Taras Shynkarenko
•Atualizado: •9 min de leitura
Como um atributo ausente decide cookie de sessão vs cookie persistenteComo um atributo ausente decide cookie de sessão vs cookie persistente

TL;DR, Resposta rápida

9 min de leitura

Um cookie persistente traz um atributo Expires ou Max-Age e fica guardado até esse prazo acabar. Um cookie de sessão não traz nenhum dos dois e, pela RFC 6265, vive até "the current session is over", conforme o navegador define. A especificação nunca define a sessão, e o MDN avisa que navegadores com session restore podem manter cookies de sessão "indefinitely". Os cookies persistentes agora têm um teto: o draft rfc6265bis limita a vida útil a 400 dias, limite que o Chrome aplica desde a versão 104, de agosto de 2022, e o Safari limita a 7 dias os cookies persistentes gravados por document.cookie. Para o consentimento na UE, o Grupo de Trabalho do Artigo 29 disse que é muito mais provável que cookies de sessão first-party fiquem isentos, em comparação com cookies persistentes third-party, mas insistiu que é a finalidade, e não a vida útil, que decide.

Toda a diferença em cookie de sessão vs cookie persistente está em um atributo: um cookie persistente tem uma data Expires ou um Max-Age em segundos, e um cookie de sessão não tem nenhum dos dois. A RFC 6265, o padrão de cookies em vigor, diz que um cookie sem nenhum dos dois atributos é mantido até "the current session is over" (conforme definido pelo user agent). Um cookie com qualquer um dos dois é mantido até esse prazo passar, ou até o navegador ou o usuário apagá-lo antes.

Set-Cookie: sid=31d4d96e407aad42; Path=/; Secure; HttpOnly
Set-Cookie: lang=en-US; Max-Age=2592000; Path=/

A primeira linha define um cookie de sessão. A segunda define um cookie persistente que dura 2,592,000 segundos, ou seja, 30 dias. O nome do cookie não tem papel nenhum. Um cookie chamado session_id com Max-Age é persistente, e um cookie chamado remember_me sem validade é um cookie de sessão.

Cookie de sessãoCookie persistente
Atributo que decideSem Expires e sem Max-AgeExpires ou Max-Age presente
Flag interna da RFC 6265persistent-flag falsepersistent-flag true
Apagado quando"the current session is over", conforme o navegador defineO prazo de validade passa
Sobrevive a reiniciar o navegadorPela especificação não, mas o session restore pode mantê-loSim
Vida útil máximaSem limite enquanto a sessão for restaurada400 dias pela rfc6265bis e no Chrome
Safari ITP quando definido por document.cookieNão é afetado, continua cookie de sessãoLimitado a 7 dias
Na navegação privadaApagado com a sessão privadaTratado como cookie de sessão

O navegador decide lendo os atributos em ordem, como descreve o algoritmo de armazenamento da seção 5.3 da RFC 6265. Se o cookie tem Max-Age, o navegador define a persistent-flag do cookie como true e usa o Max-Age para a validade. Senão, se ele tem Expires, a flag é true e o Expires define a validade. Senão, a flag é false, e a validade é definida como "the latest representable date."

Então, dentro da especificação, um cookie de sessão tem a data de validade mais distante possível, e só a persistent-flag false faz com que ele seja removido. A mesma seção diz: "When 'the current session is over' (as defined by the user agent), the user agent MUST remove from the cookie store all cookies with the persistent-flag set to false."

Mais duas regras pesam na prática:

  • Max-Age vence Expires. Seção 4.1.2.2: "If a cookie has both the Max-Age and the Expires attribute, the Max-Age attribute has precedence and controls the expiration date of the cookie."
  • Zero apaga. Pela seção 5.2.2, um Max-Age de 0 ou menos define a validade como "the earliest representable date and time", então o cookie é removido na hora. Enviar Max-Age=0 é o jeito padrão de apagar um cookie a partir do servidor.

As duas páginas de cookies do MDN discordam sobre qual relógio uma data Expires usa. O guia de cookies HTTP diz que as datas Expires são "relative to the client the cookie is being set on", então um servidor com outra hora pode causar erros. A referência de Set-Cookie diz que o servidor define Expires "with a value relative to its own internal clock", e que o Firefox e os navegadores baseados em Chromium corrigem a diferença de relógio usando o header Date, enquanto a especificação "does not indicate if/how the value should be corrected by the recipient." O conselho do guia vale nos dois casos: Max-Age é "less error-prone", porque conta segundos a partir do momento em que o navegador recebe o cookie.

Quando uma sessão termina de fato?

Nenhum padrão diz quando uma sessão termina, e essa lacuna explica por que os cookies de sessão não se comportam como o nome sugere. A RFC 6265 deixa isso para o navegador com a expressão "as defined by the user agent", que aparece tanto na seção de atributos quanto na de armazenamento.

As duas páginas de cookies do MDN descrevem o resultado por pontas opostas. A referência de Set-Cookie diz que uma sessão "finishes when the client shuts down, after which the session cookie is removed" e depois avisa que navegadores com recurso de session restore restauram os cookies de sessão também, "as if the browser was never closed." O guia de cookies HTTP vai além: "The browser defines when the 'current session' ends, and some browsers use session restoring when restarting. This can cause session cookies to last indefinitely."

Com o session restore ligado, um cookie de sessão pode durar mais do que um cookie persistente com validade de uma semana. Um código que trata o cookie de sessão como garantia de logout depende de uma configuração do navegador que ele não consegue ver, então expire a autenticação também no servidor.

Um cookie de sessão também não tem nada a ver com uma sessão no analytics. O Google Analytics 4 guarda o estado da sessão em um cookie chamado _ga_<container-id>, que a central de ajuda lista com validade padrão de 2 anos e a descrição "Used to persist session state." A sessão do analytics é uma janela de tempo que a ferramenta calcula, explicada em o que conta como sessão. O cookie que a guarda é persistente.

Uma pessoa fecha o notebook em uma mesa, o momento em que uma sessão do navegador termina e se decide o destino dos cookies de sessão dela.

Um cookie persistente pode durar até 400 dias no Chrome e no draft que vai substituir a RFC 6265. A RFC 6265 não definia limite superior. A sucessora, draft-ietf-httpbis-rfc6265bis-22, de 1 de dezembro de 2025, que o datatracker do IETF mostra na fila do RFC Editor, acrescenta a seção 5.5: o navegador "MUST limit the maximum age of the cookie", e "The limit SHOULD NOT be greater than 400 days (34560000 seconds) in the future." Um Expires ou Max-Age acima do limite "MUST be reduced to the limit."

O Chrome já aplica o teto. O blog Chrome for Developers afirma: "As of Chrome release M104 (August 2022) cookies can no longer set an expiration date more than 400 days in the future." Isso coloca os dois números publicados em conflito. O Google Analytics documenta padrões de 2 anos para _ga e _ga_<container-id>, e o Chrome, também do Google, corta qualquer data dessas para 400 dias quando o cookie é armazenado.

O Safari define um teto bem menor para um tipo de cookie. O anúncio do Intelligent Tracking Prevention 2.1 do WebKit, de 21 de fevereiro de 2019, diz: "All persistent client-side cookies, i.e. persistent cookies created through document.cookie, are capped to a seven day expiry." O mesmo post acrescenta: "Session cookies are not affected, they remain session cookies." Cookies definidos pelo header Set-Cookie de um servidor ficam fora dessa regra. O conjunto completo de regras do Safari está em como funciona o limite de 7 dias do Safari para cookies.

A RFC 6265 também pede moderação aos servidores. A seção 7.3 diz que os servidores "SHOULD promote user privacy by selecting reasonable cookie expiration periods based on the purpose of the cookie", e dá um exemplo que embaralha o vocabulário: "a typical session identifier might reasonably be set to expire in two weeks." Ou seja, um identificador de sessão muitas vezes vive em um cookie persistente.

Flowsery
Flowsery

Comece seu teste grátis de 14 dias

Painel em tempo real

Rastreamento de metas

Rastreamento sem cookies

Um calendário de parede com dias riscados, que representa as datas de expiração fixas e o limite de 400 dias dos cookies persistentes.

Vida máxima de um cookie persistente
Safari, criado por document.cookie 7 dias
Limite do Chrome e do rfc6265bis 400 dias
Valor padrão de _ga no Google Analytics 2 anos
O Chrome reduz para 400 dias o padrão de dois anos do Google Analytics, e o Safari limita a 7 dias os cookies persistentes criados por document.cookie.

Cookies de sessão e cookies persistentes precisam de consentimento?

Pelo direito da UE, nenhum dos dois tipos fica isento de consentimento por causa da vida útil, e os dois só ficam isentos quando são estritamente necessários para um serviço que o usuário pediu. O Parecer 04/2012 do Grupo de Trabalho do Artigo 29 sobre a isenção de consentimento para cookies, adotado em 7 de junho de 2012, define os dois termos: um cookie de sessão é aquele que "é automaticamente suprimido quando o utilizador encerra o seu programa de navegação", e um cookie persistente é aquele que "permanece armazenado no equipamento terminal do utilizador até atingir uma data de expiração definida (que pode ser de minutos, dias ou vários anos no futuro)."

O parecer então trata a vida útil como um sinal, não como um teste. Ele diz que "é muito mais provável que os testemunhos de origem para uma sessão (first party session cookies) estejam isentos da obrigação de consentimento do que os testemunhos de terceiros persistentes" e, no mesmo parágrafo, que "O risco para a proteção de dados reside na ou nas finalidades do tratamento, e não nas informações contidas no testemunho." O exemplo mais claro é o login. Cookies de autenticação que duram a sessão são isentos, mas "Os testemunhos persistentes que armazenam um autenticador durante as sessões de navegação não estão isentos da obrigação de consentimento", e uma caixa de seleção "recordar os meus dados (utiliza testemunhos)" aparece como forma adequada de obter consentimento para eles.

Os reguladores nacionais acrescentam números. A CNIL, da França, em suas orientações sobre ferramentas de medição de audiência, deixa esses rastreadores dispensarem consentimento só se a vida útil for limitada a um período "comme c'est le cas d'une durée de treize mois" (13 meses, por exemplo), não for "prorogée automatiquement lors des nouvelles visites" (prorrogada automaticamente em novas visitas) e os dados coletados forem guardados por no máximo "vingt-cinq mois" (25 meses). Um cookie de analytics que renova a validade a cada visita falha na segunda condição, por mais curta que seja a vida útil.

Para uma tabela de cookies em uma política de privacidade, liste a vida útil de cada cookie como ela é de fato definida, "sessão" ou uma duração, ao lado da finalidade e de se ele é first-party ou third-party. As mesmas perguntas valem para dados guardados no armazenamento do navegador, tema da página sobre local storage vs cookies.

Perguntas frequentes

Deixe de fora os atributos Expires e Max-Age ao defini-lo. O navegador então guarda o cookie até a sessão terminar, conforme o próprio navegador define. A página do MDN sobre document.cookie dá a mesma regra para cookies definidos por script: se nenhum dos dois for especificado, o cookie expira no fim da sessão.

Os cookies de sessão são apagados quando fecho uma aba?

Não. Fechar uma aba não encerra a sessão do navegador. Os cookies de sessão são removidos quando o navegador fecha, a menos que o session restore os traga de volta.

Max-Age vence. A seção 4.1.2.2 da RFC 6265 diz que Max-Age "has precedence and controls the expiration date of the cookie." O MDN acrescenta que Max-Age é menos sujeito a erro, já que uma data Expires depende de relógios que podem discordar.

Defina o mesmo cookie de novo, com o mesmo nome, domínio e caminho, e um Max-Age de 0 ou uma data Expires no passado. A RFC 6265 trata um Max-Age igual ou menor que zero como a data mais antiga representável, então o navegador remove o cookie na hora.

Cookies de sessão são mais privados que cookies persistentes?

Cookies de sessão duram menos por design, o que limita por quanto tempo eles conseguem ligar visitas. Mesmo assim, o Grupo de Trabalho do Artigo 29 julgou os cookies pela finalidade: um cookie de sessão usado para rastreamento precisa de consentimento, e um cookie persistente pode ser isento quando o usuário pediu o que ele faz.

A navegação privada transforma cookies persistentes em cookies de sessão?

Na prática, sim. A seção 7.2 da RFC 6265 diz que um navegador que oferece impedir o armazenamento persistente "MUST treat all received cookies as if the persistent-flag were set to false", e cita a navegação privada como forma comum dessa configuração. Todos os cookies somem quando a sessão privada fecha.

Não. A sessão de análise é uma janela de tempo que a ferramenta calcula, e o cookie que a guarda é persistente. O Google Analytics 4 armazena o estado da sessão em _ga_<container-id>, que a central de ajuda lista com expiração padrão de 2 anos.

Até 400 dias. Desde o Chrome M104, em agosto de 2022, um cookie não pode mais definir uma data de expiração superior a 400 dias no futuro, então um Expires ou Max-Age maior é cortado nesse limite. O rascunho rfc6265bis define o mesmo teto.

Os cookies de sessão sobrevivem a um reinício do navegador?

Pela especificação não, mas na prática muitas vezes sim. A RFC 6265 deixa ao navegador decidir quando a sessão termina, e navegadores com restauração de sessão trazem os cookies de sessão de volta como se o navegador nunca tivesse sido fechado. A MDN avisa que assim eles podem durar indefinidamente.

Sim. O Parecer 04/2012 do Grupo de Trabalho do Artigo 29 diz que cookies de login persistentes, que guardam um token de autenticação entre sessões do navegador, não estão isentos, e cita uma caixa "recordar os meus dados (utiliza testemunhos)" como forma de obter o consentimento. Cookies de autenticação que duram apenas a sessão são isentos.

Flowsery
Flowsery

Comece seu teste grátis de 14 dias

Painel em tempo real

Rastreamento de metas

Rastreamento sem cookies

Este artigo foi útil?

Diga-nos o que pensa!

Veja-nos mais no Google

Um clique marca a Flowsery como fonte preferida e nossos artigos passam a aparecer mais acima nas suas Principais notícias, no modo IA e nas visões gerais com IA.

Antes de ir...

Flowsery

Flowsery

Analytics orientado para receitas para o seu site

Rastreie cada visitante, fonte e conversão em tempo real. Simples, poderoso e sem cookies.

Painel em tempo real

Rastreamento de metas

Rastreamento sem cookies

Termos relacionados do glossário

Tamanho, validade, acesso e lei em local storage vs cookiesTamanho, validade, acesso e lei em local storage vs cookies
Glossário

Tamanho, validade, acesso e lei em local storage vs cookies

Comparamos local storage vs cookies pelas specs: tamanho, validade, o que vai em cada request, HttpOnly, Secure, SameSite, Safari ITP e ePrivacy.

•10 min de leitura
Como funciona o teste de legítimo interesse no GDPR pelo artigo 6(1)(f)Como funciona o teste de legítimo interesse no GDPR pelo artigo 6(1)(f)
Glossário

Como funciona o teste de legítimo interesse no GDPR pelo artigo 6(1)(f)

As regras do legítimo interesse no GDPR no artigo 6(1)(f), citadas do EUR-Lex, com o teste em três etapas do EDPB e por que web analytics segue em disputa.

•11 min de leitura
De onde vem o limite de tamanho de cookie de 4.096 bytesDe onde vem o limite de tamanho de cookie de 4.096 bytes
Glossário

De onde vem o limite de tamanho de cookie de 4.096 bytes

O limite de tamanho de cookie é de 4.096 bytes de nome mais valor no Chrome e no Firefox, 1.024 bytes por atributo e 180 cookies por domínio. Com as fontes.

•9 min de leitura
O que a conformidade do session replay com o GDPR realmente exige de vocêO que a conformidade do session replay com o GDPR realmente exige de você
Glossário

O que a conformidade do session replay com o GDPR realmente exige de você

Avaliar a conformidade do session replay com o GDPR passa por quatro pontos: base legal do Artigo 6, dados do Artigo 9, consentimento do 5(3) e DPIA.

•10 min de leitura
O que realmente quebra em SameSite Lax vs Strict vs NoneO que realmente quebra em SameSite Lax vs Strict vs None
Glossário

O que realmente quebra em SameSite Lax vs Strict vs None

Decida entre SameSite Lax vs Strict vs None pelo texto da RFC e pelo padrão documentado do Chrome, incluindo a exigência de Secure e o que cada modo quebra.

•10 min de leitura
O que o limite de 7 dias dos cookies no Safari realmente restringeO que o limite de 7 dias dos cookies no Safari realmente restringe
Glossário

O que o limite de 7 dias dos cookies no Safari realmente restringe

O limite de 7 dias dos cookies no Safari da Apple corta cookies first-party gravados por script, com um limite mais curto de 24 horas depois de certos cliques.

•8 min de leitura

Artigos relacionados