Um cookie é um bloco de dados armazenado no navegador que é usado para manter o estado e outras informações necessárias para um site executar seus recursos.
Um cookie é um pequeno arquivo que os sites armazenam na máquina dos usuários. As informações armazenadas viajam entre o navegador e o site.
Cada cookie é um par de chave-valor com uma série de atributos que controlam quando e onde o cookie é usado. Esses atributos são usados para definir datas de validade, por exemplo, ou indicar que o cookie só deve ser enviado por HTTPS. É possível definir um cookie em um cabeçalho HTTP ou por meio da interface JavaScript.
Os cookies são um dos métodos disponíveis para adicionar o estado persistente aos sites. Ao longo dos anos, esses recursos cresceram e evoluíram, mas deixaram a plataforma com alguns problemas de legado problemáticos. Para resolver esse problema, os navegadores (incluindo Chrome, Firefox e Edge) estão mudando de comportamento para aplicar mais padrões que preservam a privacidade.
Cookies em ação
Digamos que você tenha um blog e queira exibir a seção "Novidades" promoção na sua usuários. Os usuários podem dispensar a promoção e, em seguida, não a verão novamente por um tempo. Você pode armazenar essa preferência em um cookie e configurá-la para expirar em um mês (2.600.000 segundos) e enviá-lo apenas por HTTPS. Esse cabeçalho seria isso:
Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Quando o leitor visualiza uma página que atende a esses requisitos, ele está em uma uma conexão segura e o cookie tem menos de um mês - o navegador enviará este cabeçalho na solicitação:
Cookie: promo_shown=1
Você também pode adicionar e ler os cookies disponíveis para esse site em JavaScript usando
document.cookie
: Fazer uma atividade para document.cookie
criará ou
substituir um cookie por essa chave. Por exemplo, tente o seguinte em seu
console JavaScript do navegador:
→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"
A leitura de document.cookie
gerará todos os cookies acessíveis na atual
contexto, com cada cookie separado por ponto e vírgula:
→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
Se você tentar fazer isso em uma seleção de sites populares, perceberá que a maioria
eles definiram muito mais do que apenas três cookies. Na maioria dos casos,
cookies são enviados em cada solicitação para esse domínio, que tem um número de
e as implicações disso. A largura de banda de upload costuma ser mais restrita do que o download para seus
usuários, de modo que a sobrecarga em todas as solicitações de saída está atrasando seu tempo
ao primeiro byte. Seja conservador no número e no tamanho dos cookies que você definir. Marca
o uso do atributo Max-Age
para ajudar a garantir que os cookies não fiquem esperando
por mais tempo que o necessário.
O que são cookies primários e de terceiros?
Se você voltar para a mesma seleção de sites que estava conferindo antes, provavelmente notou que havia cookies presentes para uma variedade de domínios, não apenas aquele que você estava visitando no momento. Os cookies que correspondem ao domínio do do site atual, ou seja, o que é exibido na barra de endereços do navegador, são chamadas como cookies primários. Da mesma forma, cookies de domínios que não sejam o site atual são chamados de cookies de terceiros. Isso não é um valor absoluto um rótulo, mas é relativo ao contexto do usuário. o mesmo cookie pode ser primários ou de terceiros, dependendo do site em que o usuário está no momento.
Continuando com o exemplo acima, digamos que uma de suas postagens de blog tenha um
de um gato incrível, e ela está hospedada em
/blog/img/amazing-cat.png
: Por ser uma imagem tão incrível, outra pessoa
usa esses dados diretamente no site. Se um visitante tiver acessado seu blog e
promo_shown
e, quando visualizarem amazing-cat.png
no outro
o site de uma pessoa. O cookie será enviado na solicitação da imagem. Isso
não é muito útil para ninguém, porque promo_shown
não é usado para nada
no site desta pessoa, está apenas adicionando sobrecarga à solicitação.
Se isso é um efeito não intencional, por que você faria isso? É isso que permite que os sites mantenham o estado quando estão sendo usados em um contexto de terceiros. Por exemplo, se você incorporar um vídeo do YouTube ao seu site, os visitantes verão a opção "Assistir mais tarde" no player. Se o visitante for já estiver conectado ao YouTube, essa sessão está sendo disponibilizada no player incorporado por um cookie de terceiros, ou seja, a opção "Assistir mais tarde" vai salve o vídeo de uma só vez em vez de solicitar que o usuário faça login ou ter que saia da página e volte ao YouTube.
Uma das propriedades culturais da Web é que ela tende a ser aberta por
padrão. Isso é parte do que tornou possível que tantas pessoas
conteúdo e aplicativos próprios lá. No entanto, isso também trouxe vários
questões de segurança e privacidade. Os ataques de falsificação de solicitações entre sites (CSRF, na sigla em inglês) dependem
de que os cookies são anexados a qualquer solicitação de uma determinada origem, não importa
quem inicia a solicitação. Por exemplo, se você visitar evil.example
, ele poderá
acionarão solicitações para your-blog.example
e seu navegador será anexado
os cookies associados. Se seu blog não for cuidadoso com a forma como valida essas
solicitações, o evil.example
poderá acionar ações como excluir postagens ou adicionar
o próprio conteúdo.
Os usuários também estão se tornando mais conscientes de como os cookies podem ser usados para rastrear sua
a atividade em vários sites. No entanto, até agora não havia uma maneira de
declarar explicitamente sua intenção com o cookie. Seu cookie promo_shown
deve
ser enviados somente em contexto próprio, enquanto um cookie de sessão para um widget
deve ser incorporado a outros sites está lá intencionalmente para fornecer o
estado conectado em um contexto de terceiros.
Para declarar explicitamente sua intenção com um cookie, defina o atributo SameSite apropriado.
Para identificar seus cookies primários e definir atributos apropriados, confira Receitas de cookies primários.