2010-03-06 14 views
4

Selon the RFC, les cookies individuels dans l'en-tête HTTP «Cookie» peuvent être séparés par des virgules ainsi que par des points-virgules. Cependant, ASP.NET n'analyse pas correctement la virgule - il ne considère pas la virgule comme un séparateur, mais considère qu'il s'agit simplement d'une partie de la valeur.ASP.NET ne gère pas correctement les cookies délimités par des virgules

Par exemple Si un client envoie en-tête Cookie: a=b, c=d, l'application ASP.NET verra juste un cookie nommé "un" avec la valeur "b, c = d". Dans un cas particulier, la même chose se produit lorsque le client envoie plusieurs en-têtes de cookie (un pour chaque cookie) au lieu de combiner tous les cookies dans un en-tête. Du point de vue HTTP, ceci est complètement valide, et dans ce cas la valeur effective de l'en-tête devrait être la concaténation des valeurs de toutes ses instances séparées par des virgules.

Est-ce que quelqu'un sait une solution de contournement (ou peut-être une solution?) Pour cela? J'ai absolument besoin de travailler, car je ne contrôle pas le client.

P.S. Il est ironique que, selon this thread, le comportement du client HTTP intégré .NET (aka HttpWebRequest) est tout le contraire, et provoque également des problèmes. :-)

Répondre

0

Je crois que la solution la plus simple pour obtenir le comportement souhaité (quelle que soit la décision correcte des normes) serait de créer un HttpModule qui correctement analyser ces informations des HttpContext.Request.Headers et placer des informations corrigées dans HttpContext.Request. Biscuits.

+0

Oui, c'est ce que j'ai fini par faire. –

3

La version à laquelle vous avez lié est obsolète. Ce document HTTP State Management Mechanism est le dernier et le plus grand et il spécifie des points-virgules. Il ne dit que des virgules doivent être acceptées pour la compatibilité future, mais ce n'est pas nécessaire:

Note: Pour la compatibilité ascendante, le séparateur dans l'en-tête de Cookie est point-virgule (;) partout. Un serveur DEVRAIT également accepter la virgule (,) comme séparateur entre les valeurs de cookie pour la compatibilité future.

+0

Oh! Merci beaucoup pour le lien. Cela signifie, cependant, que le navigateur du BlackBerry n'est pas fait en standard. J'ai trouvé que pour les images (NOTE: seulement pour les images!), Il envoie chaque cookie dans un en-tête séparé, ce qui provoque ASP.NET (ou IIS?) Pour les concaténer avec des virgules (selon la norme HTTP, si je ne suis pas erreur à nouveau), ce qui à son tour provoque l'analyse incorrecte des cookies. S'il vous plaît confirmer que ma logique est correcte ici, et je vais l'envoyer à RIM pour examen. –

4

La RFC 2109 et la RFC 2965 sont connues pour ne pas décrire la réalité.

Vous devriez jeter un oeil à draft-ietf-httpstate-cookie qui est un produit de travail du nouveau groupe de travail de l'IETF httpstate.