Atributos de cookies

Quando um servidor da Web responde a uma solicitação de um recurso, ele pode incluir um cabeçalho Set-Cookie na resposta. Esse cabeçalho informa ao navegador para armazenar um cookie. Por exemplo, Set-Cookie:cat=tabby. O que são cookies? explica como eles 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 de cookie são separados por ponto e vírgula. Exemplo:

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

Este documento explica os atributos de cookie mais importantes:

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

Seguro

Se um cabeçalho Set-Cookie incluir Secure, o cookie só será incluído em 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 informações e possivelmente alterá-las.

HTTPOnly

Se um cabeçalho Set-Cookie incluir HTTPOnly, o JavaScript não poderá acessar o cookie, por exemplo, usando document.cookie. Isso ajuda na proteção contra determinados tipos de ataques que têm cookies como alvo.

SameSite

Uma solicitação de um recurso de um site diferente daquele que você está visitando é uma solicitação entre sites. Um cookie definido em resposta a uma solicitação entre sites é um cookie 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.

Saiba mais: O que são cookies de terceiros?

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 acesse cats.example e tenha 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 no cats.example. O cookie definido não será incluído nessa solicitação.

Lax

Funciona da mesma forma que Strict, mas o navegador também inclui o cookie quando o usuário segue um link para o site de origem dele. No exemplo anterior de Strict, o cookie seria incluído quando o usuário seguisse o 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.

Particionada

Com esse atributo, é possível ativar um cookie no armazenamento particionado, com um "cookie jar" 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 os sites A e B incluam 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 vão mais compartilhar cookies desse terceiro.
Com o particionamento de cookies, um serviço de terceiros que define um cookie quando incorporado em um site de nível superior não pode acessar o mesmo cookie quando o serviço é incorporado em outros sites de nível superior.

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.

Validade e idade máxima

Você pode especificar uma data e hora de Expires ou um Max-Age em segundos após o qual um cookie deve 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

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 em solicitações para 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 em 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

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 correspondam ao valor Path.

Exemplo:

  • Set-Cookie:cat=tabby; Path=/articles
    O cookie será incluído em uma solicitação para 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 em 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 em solicitações de arquivos no diretório cats.example/images.

Demonstrações

Ferramentas

Saiba mais