14 .net c# cookies httpclient cookiecontainer
我正在创建一个访问网站并登录的客户端+自动执行某些任务,但是他们最近更新了他们的cookie(无论出于何种原因......)在其标识cookie中包含逗号.
例如,Cookie将具有与此类似的值:
a,bcdefghijklmnop
Run Code Online (Sandbox Code Playgroud)
问题是,根据msdn,你不能在cookie的值中使用逗号或句点.我正在寻找的是解决这个限制的方法,某种方式使.net的Cookie与逗号的工作很好.我发现服务器确实向客户端发送了一个'SET-COOKIE'标题,我猜这是正在解析的内容,但这似乎也明显给commans和分号带来了特殊的意义(因此限制了.NET内部的类).
但是,IE,Firefox等浏览器如何正确处理cookie(正如他们显然那样,因为网站在我测试过的任何浏览器中都能正常工作.)是否有办法强迫这个在.NET中的行为?
任何帮助将不胜感激,谢谢.
一些额外的信息:
我的代码看起来像这样:
request = (HttpWebRequest)WebRequest.Create(URI);
request.CookieContainer = Program.client.cookieJar;
Run Code Online (Sandbox Code Playgroud)
其中cookieJar在Program.client中定义为:
CookieContainer cookieJar = new CookieContainer();
Run Code Online (Sandbox Code Playgroud)
当我遍历并打印出CookieContainer中的所有cookie时,我得到这样的结果:( cookies,格式为:"name" - >"value")
"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"
Run Code Online (Sandbox Code Playgroud)
问题的核心似乎是逗号和半冒号是SET-COOKIE标题字符串中的保留字符...但是那么浏览器如何处理这个?我可以自己解析字符串,但我不知道如何绕过这样的情况:( HTTP标头,格式为:"name" - >"value")
"Set-Cookie" -> "messedup_cookie=a,bcdefghijklmnop; path=/; domain=.domain.com; expires=Sat, 15-Aug-2009 09:14:24 GMT,anothervariable=i am the value;"
Run Code Online (Sandbox Code Playgroud)
如您所见,expires部分查找逗号而不是分号,以区别于下一个变量.据我所知,它的格式如下:
cookie1_var1=value; cookie1_var2=value,cookie2_var1=value; cookir2_var2=value
Run Code Online (Sandbox Code Playgroud)
但如果这是真的,是否有一种优雅的方式来处理可能出现在其中一个值中的逗号?
根据以下文章,您应该考虑使用UrlEncode和UrlDecode在cookie中存储值.
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"]);
}
}
Run Code Online (Sandbox Code Playgroud)
不要在ASP.NET中对HTML进行HTML编码!它会导致黄色的死亡屏幕,并说明cookie包含危险字符.
默认情况下,ASP.NET不对UrlEncode格式的cookie进行编码或取消编码.因此,您可能会在ASP.NET应用程序中遇到意外行为.
为了处理 cookie,由于 cookie 本质上是一个字符串,因此您可能希望在设置 cookie 值之前尝试对 cookie 值进行 URL 编码,然后在提取该值时对其进行解码。
IE:
Response.Cookies["Value1"] = Server.UrlEncode(sCookieValue);
Run Code Online (Sandbox Code Playgroud)
类似地:
string sCookieValue = Server.UrlDecode(Request.Cookies["Value1"]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10129 次 |
最近记录: |