Qual é a diferença entre criar cookies no servidor e no cliente? Eles são chamados de cookies do lado do servidor e cookies do lado do cliente? Existe uma maneira de criar cookies que só podem ser lidos no servidor ou no cliente?
Qual é a diferença entre criar cookies no servidor e no cliente? Eles são chamados de cookies do lado do servidor e cookies do lado do cliente? Existe uma maneira de criar cookies que só podem ser lidos no servidor ou no cliente?
Respostas:
Cookies são pares de chave / valor usados por sites para armazenar informações de estado no navegador. Digamos que você tenha um site (example.com), quando o navegador solicita uma página da Web, o site pode enviar cookies para armazenar informações no navegador.
Exemplo de solicitação de navegador:
GET /index.html HTTP/1.1
Host: www.example.com
Exemplo de resposta do servidor:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: foo=10
Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT
... rest of the response
Aqui, dois cookies foo = 10 e bar = 20 são armazenados no navegador. O segundo expira em 30 de setembro. Em cada solicitação subsequente, o navegador enviará os cookies de volta ao servidor.
GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
Os cookies do lado do servidor são conhecidos como "sessões". O site, neste caso, armazena um único cookie no navegador contendo um identificador de sessão único. As informações de status (foo = 10 e bar = 20 acima) são armazenadas no servidor e o identificador de sessão é usado para corresponder a solicitação aos dados armazenados no servidor.
Você pode usar sessões e cookies para armazenar: dados de autenticação, preferências do usuário, o conteúdo de um gráfico em um site de comércio eletrônico, etc ...
Abaixo prós e contras das soluções. Estas são as primeiras que me vêm à mente, certamente existem outras.
Cookie Pros:
Cookie Contras:
Prós da sessão:
Contras da sessão:
secure
:?
Você provavelmente quer dizer a diferença entre cookies Http Only e sua contraparte?
Http Apenas cookies não podem ser acessados (lidos ou gravados) em JavaScript do lado do cliente, apenas do lado do servidor. Se o sinalizador Http Only não estiver definido, ou o cookie for criado em (lado do cliente) JavaScript, o cookie pode ser lido e gravado em (lado do cliente) JavaScript, bem como no lado do servidor.
Todos os cookies são cliente e servidor
Não há diferença. Um cookie regular pode ser definido no lado do servidor ou no lado do cliente. O cookie 'clássico' será enviado de volta com cada solicitação. Um cookie que é definido pelo servidor, será enviado ao cliente em uma resposta. O servidor só envia o cookie quando ele é explicitamente definido ou alterado, enquanto o cliente envia o cookie em cada solicitação.
Mas essencialmente é o mesmo cookie.
Mas, o comportamento pode mudar
Um cookie é basicamente um name=value
par, mas após o valor pode haver um monte de atributos separados por ponto e vírgula que afetam o comportamento do cookie se for implementado pelo cliente (ou servidor). Esses atributos podem ser sobre o tempo de vida, contexto e várias configurações de segurança.
Apenas HTTP (não é apenas servidor)
Um desses atributos pode ser definido por um servidor para indicar que é um cookie somente HTTP. Isso significa que o cookie ainda é enviado e enviado, mas não estará disponível em JavaScript. Observe, porém, que o cookie ainda está lá! É apenas uma proteção embutida no navegador, mas se alguém usasse um navegador ridiculamente antigo como o IE5, ou algum cliente personalizado, eles poderiam realmente ler o cookie!
Parece que existem 'cookies do servidor', mas na verdade não existem. Esses cookies ainda são enviados ao cliente. No cliente, não há como evitar que um cookie seja enviado ao servidor.
Alternativas para alcançar 'unicidade'
Se você quiser armazenar um valor apenas no servidor ou apenas no cliente, precisará de algum outro tipo de armazenamento, como um arquivo ou banco de dados no servidor, ou Armazenamento local no cliente.
document.cookie="foo=bar"
seguido de fetch("/foobar", {credentials: 'include'} )
, nenhum cookie será enviado contendo foo=bar
. Tentei esse código diretamente neste site usando DevTools e o console.
Sim, você pode criar cookies que só podem ser lidos no lado do servidor. Eles são chamados de cookies "Apenas HTTP", conforme explicado em outras respostas já
Não, não há como (eu sei) criar "cookies" que possam ser lidos apenas no lado do cliente. Os cookies têm como objetivo facilitar a comunicação cliente-servidor.
MAS, se você quiser algo como "cookies somente para clientes", há uma resposta simples: Use "Armazenamento local".
O armazenamento local é sintaticamente mais simples de usar do que os cookies. Um bom resumo simples de cookies vs. armazenamento local pode ser encontrado em:
Um ponto: você pode usar cookies criados em JavaScript para armazenar coisas relacionadas à GUI que você só precisa no lado do cliente. MAS o cookie é enviado ao servidor para TODAS as solicitações feitas, ele se torna parte dos cabeçalhos da solicitação http, fazendo com que a solicitação contenha mais dados e, portanto, mais lento para enviar.
Se a sua página tiver 50 recursos como imagens e arquivos css e scripts, o cookie (normalmente) é enviado com cada solicitação. Mais sobre isso em Todas as solicitações da web enviam cookies do navegador?
O armazenamento local não tem essas desvantagens relacionadas à transferência de dados, ele não envia dados. Isso é ótimo.