Eu tenho duas perguntas. Entendo que, se eu especificar o domínio como .mydomain.com
(com o ponto inicial) no cookie, todos os subdomínios poderão compartilhar um cookie.
Pode subdomain.mydomain.com
acessar um cookie criado em mydomain.com
(sem o www
subdomínio)?
Pode mydomain.com
(sem o www
subdomínio) acessar o cookie se ele for criado subdomain.mydomain.com
?
Respostas:
Os 2 domínios
mydomain.com
esubdomain.mydomain.com
só podem compartilhar cookies se o domínio for explicitamente nomeado noSet-Cookie
cabeçalho. Caso contrário, o escopo do cookie é restrito ao host da solicitação. (Isso é chamado de "cookie somente para host". Consulte O que é um cookie somente para host? )Por exemplo, se você enviou o seguinte cabeçalho de
subdomain.mydomain.com
, o cookie não será enviado para solicitações amydomain.com
:No entanto, se você usar o seguinte, ele poderá ser usado nos dois domínios:
Este cookie será enviado para qualquer subdomínio de mydomain.com, incluindo subdomínios aninhados como
subsub.subdomain.mydomain.com
.Na RFC 2109 , um domínio sem um ponto inicial significava que não podia ser usado em subdomínios e apenas um ponto inicial (
.mydomain.com
) permitiria que ele fosse usado em vários subdomínios (mas não no domínio de nível superior). não é possível nas especificações mais antigas).No entanto, todos os navegadores modernos respeitam a especificação mais recente RFC 6265 e ignoram qualquer ponto inicial, o que significa que você pode usar o cookie nos subdomínios e no domínio de nível superior.
Em resumo, se você definir um cookie como o segundo exemplo acima
mydomain.com
, ele poderá ser acessado porsubdomain.mydomain.com
e vice-versa. Isso também pode ser usado para permitirsub1.mydomain.com
esub2.mydomain.com
compartilhar cookies.Veja também:
fonte
domain=.mydomain.com
não é válido para o mydomain.com, portanto os dois RFCs não são compatíveis entre si.Não sei se a resposta do @cmbuckley está mostrando a imagem completa. O que eu li é:
Além disso
Para mim, isso significa que você pode proteger os cookies de serem lidos por subdomínio / domínio, mas não pode impedir a gravação de cookies nos outros domínios. Assim, alguém pode reescrever os cookies do site controlando outro subdomínio visitado pelo mesmo navegador. O que pode não ser uma grande preocupação.
Impressionante site de teste de cookies fornecido por @cmbuckley / para aqueles que perderam a resposta em sua resposta como eu; vale a pena rolar para cima e votar /:
fonte
domain
, o cookie é usado apenas para o host da solicitação. Isso significa queSet-Cookie: name=value
frommydomain.com
não será enviado com solicitações para subdomínios. Também brinque com este script de teste .Aqui está um exemplo usando a API de cookies DOM ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), para que possamos ver por nós mesmos o comportamento.
Se executarmos o seguinte JavaScript:
Parece ser o mesmo que executar:
A chave de cookie fica disponível (apenas) no domínio mydomain.com .
Agora, se você executar o seguinte JavaScript em mydomain.com:
A chave do cookie fica disponível para mydomain.com e também para subdomínio.meudominio.com .
Por fim, se você tentar executar o seguinte em subdomínio.meudominio.com:
A chave de cookie fica disponível em subdomínio.meudominio.com ? Fiquei um pouco surpreso que isso seja permitido; Eu supus que seria uma violação de segurança para um subdomínio poder definir um cookie em um domínio pai.
fonte
httponly
cookies versus o tipo de cookies que você está criando.domain
atributo faz com que o cookie funcione em subdomínios; esse atributo não funciona). Os pontos iniciais são ignorados na melhor das hipóteses e ativamente bloqueados na pior.Todos observe que você pode definir um cookie de um subdomínio em um domínio.
(enviado na resposta para solicitação
subdomain.mydomain.com
)Mas você NÃO PODE definir um cookie de um domínio em um subdomínio.
(enviado na resposta para solicitação
mydomain.com
)PORQUE ?
De acordo com as especificações RFC 6265, seção 5.3.6 Modelo de armazenamento
e RFC 6265 seção 5.1.3 Correspondência de Domínio
Portanto, "subdomínio.meudominio.com" corresponde ao domínio "meudomínio.com", mas "meudomínio.com" NÃO corresponde ao domínio "subdomínio.meudominio.com"
Verifique esta resposta também.
fonte
Nos dois casos, sim, pode, e esse é o comportamento padrão para o IE e o Edge.
As outras respostas acrescentam informações valiosas, mas descrevem principalmente o comportamento no Chrome. é importante observar que o comportamento é completamente diferente no IE. O script de teste muito útil do CMBuckley demonstra que, no Chrome (digamos), os cookies não são compartilhados entre raiz e subdomínios quando nenhum domínio é especificado. No entanto, o mesmo teste no IE mostra que eles são compartilhados. Este caso do IE está mais próximo da descrição do take-home no link www-or-not-www da CMBuckley. Sei que é esse o caso, porque temos um sistema que usa cookies de serviço diferentes no raiz e no subdomínio. Tudo funcionou bem até que alguém o acessou no IE e os dois sistemas discutiram sobre qual cookie de sessão venceria até explodirmos o cache.
fonte
Cuidado se você estiver trabalhando no localhost! Se você armazenar seu cookie em js como este:
Pode não estar acessível ao seu subdomínio, como
sub.localhost
. Para resolver esse problema, você precisa usar o Virtual Host . Por exemplo, você pode configurar seu host virtualServerName
localhost.com
e poderá armazenar seu cookie em seu domínio e subdomínio assim:fonte
Solução simples
O quinto parâmetro de Setcookie determina os (sub) domínios em que o cookie está disponível. A configuração para (EXAMPLE.COM) torna disponível para qualquer subdomínio (por exemplo: SUBDOMAIN.EXAMPLE.COM)
Referência: http://php.net/manual/en/function.setcookie.php
fonte