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.
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 paracats.exampleSet-Cookie:cat=tabby; Domain=cats.example
O cookie será incluído em solicitações paracats.examplee também em solicitações de recursos em subdomínios, comofluffy.cats.exampleouuser.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.htmlSet-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
- 1pc.glitch.me: demonstração de cookie primário.
- 3pc.glitch.me: demonstração de cookie de terceiros
Ferramentas
- Ver, adicionar, editar e excluir cookies no Chrome DevTools
- Ferramenta de análise de dados do Sandbox de privacidade
Saiba mais
- Receitas de cookies primários
- O que são cookies?
- O que são cookies de terceiros?
- Solicitação e resposta HTTP
- Ferramentas de cookies
- Demonstrações de cookies
- Como usar cookies HTTP
- Explicação sobre cookies SameSite
- OWASP: cookies