Digamos, por exemplo, que eu tenha um aplicativo enviando os seguintes cabeçalhos HTTP para definir como cookie chamado "a":
Set-Cookie: a=1;Path=/;Version=1
Set-Cookie: a=2;Path=/example;Version=1
Se eu acessar /example
no servidor os dois caminhos são válidos, então tenho dois cookies chamados "a"! Como o navegador não envia nenhuma informação de caminho, os dois cookies não podem ser distinguidos.
Cookie: a=2; a=1
Como esse caso deve ser tratado? Escolha o primeiro? Criar uma lista com todos os valores de cookies? Ou esse caso deve ser considerado um erro do desenvolvedor?
Respostas:
Deste artigo no SitePoint :
Editar: essas informações de 2010 parecem estar desatualizadas, parece que os navegadores agora podem enviar vários cookies em troca, consulte a resposta de @Nate abaixo para obter detalhes
fonte
.a.com
e hosta.com
A resposta referente a um artigo no SitePoint não está totalmente completa. Consulte a RFC 6265 (para ser justo, esta RFC foi lançada em 2011 depois que esta pergunta foi postada, que substitui a RFC 2965 anterior de 2000 e a RFC 2109 de 1997).
Seção 5.4 , subseção 2 tem o seguinte:
Há também esta pequena joia na seção 4.2.2 :
Em seu cookie de solicitação de exemplo ( Cookie: a = 2; a = 1 ), observe que o cookie definido com o caminho / exemplo ( a = 2 ) tem um caminho mais longo do que aquele com o caminho / ( a = 1 ) e assim é enviado de volta para você primeiro na linha, o que corresponde à recomendação da especificação. Portanto, você está mais ou menos correto em sua suposição de que pode selecionar o primeiro valor.
Infelizmente, a linguagem usada nas RFCs é extremamente específica - o uso das palavras DEVE e NÃO DEVE introduzir ambigüidade nas RFCs. Eles indicam as convenções que devem ser seguidas, mas não precisam estar em conformidade com as especificações. Embora eu compreenda o RFC para isso muito bem, não fiz a pesquisa para ver o que os clientes do mundo real fazem; é possível que um ou mais navegadores ou outros softwares agindo como clientes HTTP não enviem o cookie de caminho mais longo (por exemplo: / exemplo ) primeiro no cabeçalho Cookie : .
Se você está em posição de controlar o valor do cookie e deseja tornar sua solução infalível, é melhor:
usando um nome de cookie diferente para substituir em certos caminhos, como:
armazenando o caminho de que você precisa no próprio valor do cookie:
Ambas as soluções alternativas requerem lógica adicional no servidor para selecionar o valor do cookie desejado, comparando o URL solicitado com a lista de cookies disponíveis. Não é muito bonito. É uma pena que o RFC não teve a previsão de exigir que um caminho mais longo substitua completamente um cookie por um caminho mais curto (por exemplo: em seu exemplo, você receberia Cookie: a = 2 apenas ).
fonte
path=/;Path=/
especificação está em conformidade com o FRC-6265? Não encontrei tal menção. Tomcat ameaça qualquer ";" no caminho como símbolo incorretoa=2&path=/example;Path=/example
para que não haja;
caminho.Não há nada de errado em ter vários valores para o mesmo nome ... se você quiser. Você pode até inserir contexto adicional no valor.
Do contrário, é claro que nomes diferentes são uma solução se você quiser os dois contextos.
A alternativa é enviar o mesmo nome de cookie com o mesmo caminho (e domínio), mesmo a partir de caminhos mais específicos. Essas instruções definidas para o cookie sobrescreverão o valor desse cookie.
Agora que você sabe a parte mais importante (como eles funcionam) e pode realizar o que precisa de algumas maneiras diferentes, minha resposta à sua pergunta é: este é um problema do desenvolvedor.
fonte
Certamente estou ciente de aplicativos que fazem isso extensivamente usando vários IDs de sessão - e parecem funcionar de forma consistente. No entanto, não sei - e não tenho intenção de descobrir - se eles fazem isso porque o navegador retorna os cookies em uma ordem consistente, dependendo de quando eles foram definidos / para qual caminho foram definidos ou se o aplicativo tenta corresponder a cada um um para uma sessão existente.
Eu recomendo fortemente que esta prática seja evitada.
No entanto, se você realmente deseja saber como os navegadores (e aplicativos) lidam com esse cenário, por que não construir um equipamento de teste e experimentá-lo.
fonte
Se você usa o framework Java / Scala Play: cuidado! Se uma solicitação contiver vários cookies com o mesmo nome, o Play apresentará apenas 1 deles em seu código.
fonte
Se você precisar distingui-los, terá de atribuir-lhes valores-chave diferentes.
fonte