ASP.NET ne parvient pas à gérer correctement les cookies délimités par des virgules
-
25-09-2019 - |
Question
Selon RFC, les cookies individuels dans l'en-tête HTTP "Cookie" peut être séparés par des virgules, ainsi que par des points virgules. Cependant, ASP.NET n'analyse pas le cas des virgules correctement -. Il ne compte pas virgule comme séparateur, mais estime qu'une partie de la valeur
Par exemple
Si un client envoie Cookie: a=b, c=d
d'en-tête, l'application ASP.NET verra juste un cookie nommé "un" avec la valeur "b, c = d".
En cas particulier, la même chose se produit lorsque le client envoie plusieurs têtes de cookies (un pour chaque biscuit) au lieu de combiner tous les cookies dans un en-tête. Du point de vue HTTP, cela est tout à fait valable, et dans ce cas la valeur effective de l'en-tête doit être concaténation des valeurs de toutes ses instances séparées par des virgules.
Quelqu'un sait-il une solution de contournement (ou peut-être une solution?) Pour cela? Je dois absolument obtenir ce travail, parce que je ne contrôle pas le client.
P.S. Il est ironique de constater que, selon ce fil , le comportement du client HTTP intégré .NET (alias HttpWebRequest) est tout le contraire, et provoque également des problèmes. : -)
La solution
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.Cookies.
Autres conseils
Les deux RFC 2109 et RFC 2965 sont connus pour ne pas décrire la réalité.
Vous devriez jeter un oeil à draft-ietf-httpstate -cookie qui est un produit de travail de la nouvelle IETF httpstate Groupe de travail.
La version que vous lié à est obsolète. Cette HTTP document de mécanisme de gestion d'Etat est le dernier et le plus grand et il précise des points-virgules. Il ne dit que pour la compatibilité future devraient être acceptées des virgules, mais ce n'est pas nécessaire:
Remarque: Pour la compatibilité ascendante, le séparateur dans l'en-tête de Cookie est point-virgule (;) partout. Un serveur DEVRAIT également accepter une virgule (,) comme séparateur entre les cookies valeurs pour la compatibilité future.