Pergunta

De acordo com o RFC, cookies individuais no cabeçalho HTTP "cookie" podem ser separados por vírgulas e por semicolons. No entanto, o ASP.NET não analisa o caso de vírgulas corretamente - ele não conta vírgula como um separador, mas o considera apenas parte do valor.

Por exemploSe um cliente enviar cabeçalho Cookie: a=b, c=d, o aplicativo ASP.NET verá apenas um cookie chamado "A" com valor "b, c = d".

Como um caso especial, o mesmo acontece quando o cliente envia vários cabeçalhos de biscoito (um para cada biscoito) em vez de combinar todos os cookies em um cabeçalho. Do ponto de vista do HTTP, isso é completamente válido e, nesse caso, o valor efetivo do cabeçalho deve ser a concatenação dos valores de todas as suas instâncias separadas por vírgulas.

Alguém conhece uma solução alternativa (ou talvez uma correção?) Para isso? Eu absolutamente preciso fazer isso funcionando, porque não controlo o cliente.

Ps é irônico que, de acordo com este tópico, O comportamento do cliente HTTP interno .NET (também conhecido como httpwebrequest) é exatamente o oposto e também causa problemas. :-)

Foi útil?

Solução

Acredito que a solução mais simples para obter o comportamento desejado (independentemente da correção dos padrões) seria criar um httpmodule que analisasse corretamente essas informações do httpcontext.request.headers e colocasse informações corrigidas no httpcontext.request.cookies.

Outras dicas

Tanto o RFC 2109 quanto o RFC 2965 são conhecidos por não descrever a realidade.

Você deveria dar uma olhada em Draft-ietf-httpstate-cookie que é um produto de trabalho do novo grupo de trabalho IETF HTTPSTATE.

A versão a que você vinculou é obsoleta. este Mecanismo de gerenciamento de estado HTTP O documento é o mais recente e o melhor e especifica semi-corons. Diz que vírgulas devem ser aceitas para compatibilidade futura, mas isso não é necessário:

Nota: Para compatibilidade com versões anteriores, o separador no cabeçalho do cookie é semi-colon (;) em todos os lugares. Um servidor também deve aceitar vírgula (,) como o separador entre os valores de cookies para compatibilidade futura.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top