c# - 使用 .net (C#) System.Net.Cookie 处理 cookie 值内的逗号

标签 c# .net cookies httpclient cookiecontainer

我正在创建一个客户端来访问一个网站并登录并自动执行一些任务,但是他们最近将他们的 cookie 更新为(无论出于何种原因......)在他们的标识 cookie 中包含一个逗号。

例如,Cookie 的值类似于:

a,bcdefghijklmnop

问题是,根据msdn您不能在 cookie 的值中使用逗号或句点。我正在寻找一种解决此限制的方法,一种使 .net 的 Cookie 使用逗号更好地工作的方法。我发现服务器确实向客户端发送了一个“SET-COOKIE” header ,我猜这就是正在解析的内容,但这似乎也显然给命令和分号赋予了特殊含义(因此限制了.NET 本身中的类)。

但是 IE、Firefox 等浏览器是如何正确处理 cookie 的(正如他们所做的那样,因为该网站在我测试过的任何浏览器中都运行良好。)有没有办法在 .NET 中强制执行此行为?

如有任何帮助,我们将不胜感激。

--- 编辑 ---

一些附加信息:

我的代码看起来像这样:

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

其中 cookieJar 在 Program.client 中定义为:

CookieContainer cookieJar = new CookieContainer();

当我遍历并打印出 CookieContainer 中的所有 cookie 时,我得到如下信息:(cookie,格式为:“名称”->“值”)

"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 header 字符串中的保留字符......但是浏览器如何处理这个?我可能可以自己解析字符串,但我不知道如何解决这种情况:(HTTP header ,格式为:“名称”->“值”)

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

如您所见,expires 部分寻找逗号而不是分号来将自己与下一个变量区分开来。据我所知,它的格式是:

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

但如果这是真的,是否有一种优雅的方法来处理可能出现在其中一个值内的逗号?

最佳答案

根据 the following article ,您应该考虑使用 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"]);
    }
}

Don’t ever HTML encode a cookie in ASP.NET! It results in a yellow screen of death and an exception stating that the cookie contains dangerous characters.

MSDN also has an article关于这个问题。

ASP.NET does not encode or unencode cookies in UrlEncode format by default. As a result, you may encounter unexpected behavior in ASP.NET applications.

关于c# - 使用 .net (C#) System.Net.Cookie 处理 cookie 值内的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1136405/

相关文章:

c# - StreamReader 没有读取我的整个文件?

C# 替代 Visual Basic .NET 命名空间 My

PHP设置cookie不是100%

security - 是否存在防止 cookie 被盗的方法?

c# - mscorlib.dll 中的 System.UnauthorizedAccessException

c# - 使用派生类从 C# 中的 XML 反序列化对象

c# - .Net 中的网格生成库?

c# - 在 .NET Core 控制台应用程序中针对 EF Core DbContext 服务错误建立依赖注入(inject)

c# - Xamarin 表单 Flex 布局中心项目

javascript - 使用javascript找出cookie的到期日期