处理使用.NET的(C#)System.Net.Cookie cookie的值内的逗号(handli

2019-06-26 02:30发布

我创建一个客户端访问一个网站,并自动+做了一些工作,但是他们最近更新了自己的饼干(不管出于什么原因...)包含其标识的cookie里面一个逗号。

因此,例如,cookie将有一个类似的值:

a,bcdefghijklmnop

问题是,根据MSDN不能使用逗号,也没有一个周期的cookie的值内。 我正在寻找的是解决此限制的一种方式,一些方法,使.NET的Cookie的工作很好用逗号。 我发现,服务器就发送一个“SET-COOKIE”标头到客户端,我猜这就是被解析,但也似乎明显对commans和分号赋予特殊的含义,以及(这样的限制里面.NET本身)的类。

但后来如何做一个浏览器,如IE,火狐等..处理cookie的正常(因为他们清楚这样做,因为网站我已经测试过它。任何浏览器工作正常)是否有可能办法迫使这在.NET中的行为吗?

任何帮助,将不胜感激,谢谢。

---编辑---

一些额外的信息:

我的代码看起来是这样的:

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

凡cookieJar在Program.client被定义为:

CookieContainer cookieJar = new CookieContainer();

当我遍历并在的CookieContainer打印出所有的饼干,我得到的是这样的:(饼干,格式为:“姓名” - >“值”)

"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" 

问题的核心似乎是逗号和半冒号是set-cookie头字符串中保留字符...却对浏览器如何处理呢? 我大概可以解析字符串自己,但我不知道怎么去解决像这样的情况:(HTTP报头,格式为:“姓名” - >“值”)

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

正如你所看到的,到期部分寻找一个逗号,而不是一个分号从下一个变量中脱颖而出。 至于我可以告诉大家,它的格式为:

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

但是,如果这是真的,是有一种优雅的方式来处理内部的一个值可能出现的逗号?

Answer 1:

根据下面的文章 ,你应该考虑以UrlEncode和UrlDecode在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"]);
    }
}

永远不要HTML编码在ASP.NET一个cookie! 它导致死亡黄屏和异常,说明该cookie包含危险字符。

MSDN也有一篇文章的题目。

ASP.NET不编码或默认情况下以UrlEncode格式unencode饼干。 其结果是,你可能会遇到ASP.NET应用程序中出现意外行为。



Answer 2:

为了处理cookie的,因为一个cookie本质上是一个字符串,你可能会想尝试URL设置,然后解码它,当你拔出前值编码cookie的值。

即:

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

和类似的:

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


文章来源: handling a comma inside a cookie value using .net's (C#) System.Net.Cookie