【问题标题】:"$" dollar character prefixing cookies names"$" 美元字符前缀 cookie 名称
【发布时间】:2012-02-29 22:58:30
【问题描述】:

我有这个函数可以在 CookieContainer (this.cookies) 中检索响应 cookie

private void getCookies(string url)
{

  // request
  HttpWebRequest request = CreateWebRequestObject(url);
  request.CookieContainer = this.cookies;

  request.Headers.Add("Accept-Encoding", "gzip, deflate");
  request.Headers.Add("Accept-Language", " es-MX,es;q=0.8,en-us;q=0.5,en;q=0.3");
  request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";



  request.Method = "GET";
  request.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2";

  // response
  using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
  {
    foreach (Cookie c in response.Cookies)
    {
      this.cookies.Add(new Cookie(c.Name, c.Value, c.Path, c.Domain));


    }
  }
}

但是,当我在 Fiddler 中调试请求时,我得到了这个:

为什么 cookie 中有一个“$”?

根据MSDN

public Cookie(字符串名称、字符串值、字符串路径、字符串 域)

姓名 类型:System.String Cookie 的名称。名称中不得使用以下字符:等号、分号、逗号、换行符 (\n)、回车符 (\r)、 制表符 (\t) 和空格字符。美元符号字符 ("$") 不能 成为第一个字符。

我怎样才能删除这个字符?

【问题讨论】:

  • 东西坏了吗?你有问题吗?
  • 我想把$Domain换成Domain等等
  • 如果您更改接收到的 cookie,您是否能够基于这些 cookie 正确创建新请求?
  • ...new Cookie(c.Name.Skip(1),... ?
  • 但这不是 cookie 编码方式的一部分吗?如果在代码中没有美元符号的情况下得到实际值,有什么问题?

标签: c# cookies


【解决方案1】:

你看到的$不是cookie的名称;它是一个与 cookie 关联的属性

RFC 2109 处理 HTTP 状态管理; 4.4 节专门处理美元符号前缀。希望对您有所帮助...

【讨论】:

  • RFC-2109 在 2000 年被 tools.ietf.org/html/rfc2965 废弃,而后者又在 2011 年被 tools.ietf.org/html/rfc6265 废弃。人们知道:这个最新的 RFC 没有提到 @987654324 的属性@,所以使用这些以 $ 为前缀的属性已经过时了近十年了。
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
相关资源
最近更新 更多