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

本文关键字:适用于 不适用 InternetSetCookie 应用程序 | 更新日期: 2023-09-27 18:31:36

在我的C#应用程序中,我正在使用HTTPWebrequest等浏览网站。在某个时候,我想在 Web 浏览器控件中显示网站。

当前的 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 之一,我不知道为什么。

你知道我该如何解决这个问题吗?

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

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