Atributos de cookies

Quando um servidor da Web responde a uma solicitação de recurso, ele pode incluir um cabeçalho Set-Cookie com a resposta. Esse cabeçalho informa ao navegador para armazenar um cookie. Por exemplo, Set-Cookie:cat=tabby. O que são cookies? explica como os cookies funcionam.

Além de fornecer um nome e um valor de cookie, Set-Cookie pode incluir atributos para controlar se os cookies são definidos e quando eles expiram. Os atributos do cookie são separados por ponto e vírgula. Exemplo:

    Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;

Este artigo explica os atributos de cookie mais importantes:

Usar cookies HTTP explica os atributos de cookies com mais detalhes técnicos.

Seguro

👉 Inclua Secure por padrão para todos os cookies.

Se um cabeçalho Set-Cookie incluir Secure, o cookie só será incluído com solicitações criptografadas que usam o protocolo HTTPS. Ele não será incluído em solicitações HTTP. Isso pode ajudar a impedir ataques intermediários, em que um invasor intervém secretamente nas comunicações entre o navegador e o servidor para transmitir e, possivelmente, alterar informações.

HTTPOnly

👉 Inclua HTTPOnly por padrão para todos os cookies. Omita apenas se você precisar de acesso a JavaScript.

Se um cabeçalho Set-Cookie incluir HTTPOnly, o cookie não poderá ser acessado usando document.cookie. Isso ajuda a proteger contra determinados tipos de ataque que são direcionados a cookies.

SameSite

👉 SameSite=Lax é o padrão se nenhum valor for definido. SameSite=None permite cookies entre sites, mas significa que os cookies serão bloqueados quando as restrições de cookies de terceiros estiverem em vigor.

Uma solicitação de um recurso de um site diferente do que você está visitando é uma solicitação entre sites. Um cookie definido em resposta a uma solicitação entre sites é conhecido como cookie de terceiros. Saiba mais: O que são cookies de terceiros?

O atributo SameSite controla se um cookie de terceiros será incluído em uma solicitação. Ele tem três valores possíveis: Strict, Lax ou None.

Estrito

O cookie só será enviado em resposta a solicitações de uma página que esteja no site de origem do cookie. Por exemplo, imagine que um usuário visita cats.example e tem um cookie definido com o atributo SameSite=Strict. Mais tarde, o usuário está em um site diferente e clica em um link para uma página em cats.example. O cookie definido não será incluído nessa solicitação.

Lax

Isso funciona da mesma forma que Strict, exceto que o navegador também inclui o cookie quando o usuário segue um link para o site de origem do cookie. No exemplo Strict anterior, o cookie seria incluído quando o usuário clicasse no link para cats.example. Lax é o padrão se nenhum atributo SameSite for incluído em um cabeçalho Set-Cookie.

Nenhum

Sem restrições: o cookie será incluído em uma solicitação, seja ela entre sites ou não. Com SameSite=None, o cookie também precisa ter o atributo Secure.

Saiba mais: Explicação sobre cookies SameSite.

Particionada

👉 Inclua o atributo Partitioned por padrão se você estiver criando um cookie de terceiros, a menos que saiba explicitamente que ele precisa ser compartilhado em várias incorporações.

Esse atributo permite ativar um cookie no armazenamento particionado, com um armazenamento separado por site de nível superior. O cookie tem duas chaves, pelo site de nível superior e pelo domínio que o define.

Por exemplo, imagine que o site A e o site B incluem um iframe do site C. Um cookie particionado definido pelo iframe no site A não pode ser acessado pelo iframe no site B: o cookie AC é separado do cookie BC.

Diagrama mostrando que dois sites diferentes que incorporam um terceiro comum
  não compartilham mais cookies desse terceiro.
Com o particionamento de cookies, um serviço de terceiros que define um cookie quando incorporado a um site de nível superior não pode acessar esse mesmo cookie quando o serviço é incorporado a outros sites de nível superior.

Os cookies com um atributo Partitioned são conhecidos como CHIPS: cookies com estado particionado independente.

Os cookies particionados precisam ter o atributo Secure.

Saiba mais: Cookies com estado particionado independente.

Expires e Max-Age

👉 Deixe de fora os atributos Max-Age e Expires, a menos que você precise de um cookie para durar mais do que a sessão atual. Os navegadores expiram cookies. Portanto, não faz sentido definir uma expiração para anos no futuro. Em vez disso, reconsidere atualizar os cookies quando um usuário visitar seu site novamente.

É possível especificar uma data e hora Expires ou um Max-Age em segundos, após o que um cookie precisa ser excluído e não mais enviado. Exemplo:

  • Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
  • Set-Cookie:cat=tabby; Max-Age=86400

Se você não especificar um atributo Max-Age ou Expires, um cookie será excluído quando a sessão atual terminar. Esse tipo de cookie às vezes é conhecido como cookie de sessão.

Domínio

👉 A menos que você precise incluir um cookie nas solicitações a subdomínios, não inclua um atributo Domain.

Se um cabeçalho Set-Cookie tiver um atributo Domain, o cookie será incluído com solicitações para o domínio especificado e qualquer um dos subdomínios dele.

Se um cabeçalho Set-Cookie não tiver um atributo Domain, o cookie não será incluído nas solicitações a subdomínios.

Em outras palavras, incluir o atributo Domain reduz as restrições de domínio.

Por exemplo, com uma resposta do site cats.example:

  • Set-Cookie:cat=tabby
    O cookie só será incluído em solicitações para cats.example
  • Set-Cookie:cat=tabby; Domain=cats.example
    O cookie será incluído nas solicitações para cats.example e também em solicitações de recursos em subdomínios, como fluffy.cats.example ou user.assets.cats.example.

Caminho

👉 Inclua Path=/ com um cookie se você precisar que todas as solicitações para qualquer caminho no seu site incluam o cookie. Não confie em Path para proteção de segurança.

Se um atributo Path for incluído em um cabeçalho de resposta Set-Cookie, o cookie definido só será incluído em solicitações para URLs (no site que definiu o cookie!) que correspondem ao valor Path.

Exemplo:

  • Set-Cookie:cat=tabby; Path=/articles
    O cookie será incluído para uma solicitação de qualquer caminho de URL que comece com /articles:
    https://cats.example/articles/tabby/index.html
    https://cats.example/articles/breeds/tabby/index.html
    https://cats.example/images/tabby.jpg
    https://cats.example/en/articles/tabby/index.html
  • Set-Cookie:cat=tabby; Path=/
    Todas as solicitações para qualquer URL no site vão incluir o cookie.

Se um cabeçalho de resposta Set-Cookie não tiver um valor Path, o cookie só será incluído com solicitações para o mesmo diretório. Por exemplo, imagine que um cookie cat=tabby seja definido em resposta a uma solicitação de cats.example/images/tabby.jpg.. Se nenhum Path for definido, o cookie só será incluído com solicitações de arquivos no diretório cats.example/images.

Demonstrações

Ferramentas

Saiba mais