gérer une virgule dans une valeur de cookie à l’aide de .net (C #) System.Net.Cookie

Je crée un client pour qu’il visite un site Web et se connecte + effectue certaines tâches automatiquement. Cependant, il a récemment mis à jour ses cookies pour (pour une raison quelconque …) contenir une virgule dans son cookie d’identification.

Ainsi, par exemple, le cookie aura une valeur similaire à celle-ci:

a,bcdefghijklmnop 

Le problème est que, selon msdn, vous ne pouvez pas utiliser de virgule ni de point dans la valeur d’un cookie. Ce que je recherche, c’est un moyen de contourner cette limitation, un moyen de rendre le travail de .net‘s Cookie agréable avec les virgules. J’ai constaté que le serveur envoie un en-tête ‘SET-COOKIE’ au client et je suppose que c’est ce qui est analysé, mais cela semble aussi évidemment donner une signification spéciale aux commans et aux points-virgules (d’où la limitation de la classe à l’intérieur de .NET même).

Mais ensuite, comment un navigateur tel que IE, Firefox, etc., gère-t-il correctement le cookie (comme cela est clairement le cas, car le site Web fonctionne correctement dans les navigateurs avec lesquels je l’ai testé)? Existe-t-il un moyen de le forcer? comportement dans .NET?

Toute aide serait appréciée Merci.

— MODIFIER —

quelques informations supplémentaires:

Mon code ressemble à ceci:

 request = (HttpWebRequest)WebRequest.Create(URI); request.CookieContainer = Program.client.cookieJar; 

Où cookieJar est défini dans Program.client comme suit:

 CookieContainer cookieJar = new CookieContainer(); 

Lorsque je boucle et imprime tous les cookies dans le CookieContainer, je reçois quelque chose comme ceci: (cookies, au format: “nom” -> “valeur”)

 "normal_cookie" -> "i am the value" "messedup_cookie" -> "a" "bcdefghijklmnop" -> "" // What I should get is this: "normal_cookie" -> "i am the value" "messedup_cookie" -> "a,bcdefghijklmnop" 

Le cœur du problème semble être que les virgules et les point-virgules sont des caractères réservés dans la chaîne d’en-tête SET-COOKIE … mais comment les navigateurs gèrent-ils cela? Je peux probablement parsingr la chaîne moi-même mais je ne sais pas comment contourner des situations telles que celle-ci: (En-tête HTTP, au format: “nom” -> “valeur”)

 "Set-Cookie" -> "messedup_cookie=a,bcdefghijklmnop; path=/; domain=.domain.com; expires=Sat, 15-Aug-2009 09:14:24 GMT,anothervariable=i am the value;" 

Comme vous pouvez le constater, la section expires cherche une virgule au lieu d’un point-virgule pour se différencier de la variable suivante. Autant que je sache, c’est dans le format:

 cookie1_var1=value; cookie1_var2=value,cookie2_var1=value; cookir2_var2=value 

Mais si cela est vrai, existe-t-il une manière élégante de traiter les virgules qui peuvent se trouver dans l’une des valeurs?

Selon l’article suivant , vous devriez considérer UrlEncode et UrlDecode pour stocker les valeurs dans les cookies.

 private void SetCookie() { HttpCookie cookie = new HttpCookie("cookiename"); cookie.Expires = DateTime.Now.AddMonths(24); cookie.Values.Add("name", Server.UrlEncode(txtName.Text)); Response.Cookies.Add(cookie); } private void GetCookie() { HttpCookie cookie = Request.Cookies["cookiename"]; if (cookie != null) { txtName.Text = Server.UrlDecode(cookie.Values["name"]); } } 

Ne jamais coder HTML un cookie dans ASP.NET! Il en résulte un écran de décès jaune et une exception indiquant que le cookie contient des caractères dangereux.

MSDN a également un article sur le sujet.

ASP.NET ne code pas et ne décode pas les cookies au format UrlEncode par défaut. Par conséquent, vous pouvez rencontrer un comportement inattendu dans les applications ASP.NET.

Pour gérer le cookie, puisqu’un cookie est essentiellement une chaîne, vous pouvez essayer de coder l’URL de la valeur du cookie avant de la définir, puis de le décoder lorsque vous extrayez la valeur.

c’est à dire:

 Response.Cookies["Value1"] = Server.UrlEncode(sCookieValue); 

et pareillement:

 ssortingng sCookieValue = Server.UrlDecode(Request.Cookies["Value1"]);