C#应用程序中的InternetSetCookie不适用于子域

时间:2012-04-19 18:24:36

标签: c# cookies browser webclient webrequest

在我的C#应用​​程序中,我使用HTTPWebrequest等浏览网站。 在某一点上,我想在WebBrowser控件中显示网站。

当前Cookie保存在CookieContainer中。

以下代码非常完美,所有Cookie都是由浏览器在请求中发送的。

CookieCollection cookies = ck.GetCookies(new Uri("http://www.abcde.de"));

foreach (Cookie c in cookies) {
  if (!InternetSetCookie("http://www.abcde.de", c.Name, c.Value))
    throw new Exception("Exception setting cookie: Win32 Error code=" 
    + Marshal.GetLastWin32Error());
  }

  /** Setting header_infos, POST-Data etc **/
  webBrowser1.Navigate(link, "_self", parameterbyte, header_infos.ToString());

但是当我从

这样的子域中检索Cookie时
CookieCollection cookies = ck.GetCookies(new Uri("http://ab.cde.de"));

IntersetSetCookie函数抛出异常,因为URL格式“http://ab.cde.de”无效。当我尝试“http://www.cde.de”或“http://www.ab.cde.de”时,我没有得到例外,但网站没有正确加载,因为浏览器只发送请求中的五个cookie中的一个而我不知道原因。

你知道我怎么解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我认为出于安全原因,这种行为是故意的。子域上的站点可以托管在完全不同的服务器上,该服务器由与主域上的站点完全不同的人管理。 Cookie可能包含敏感信息,因此Web浏览器会阻止将其发送到另一个(子)域。