【问题标题】:InternetSetCookie in C# Application doesn't work with SubdomainsC# 应用程序中的 InternetSetCookie 不适用于子域
【发布时间】:2012-05-01 08:11:39
【问题描述】:

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

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

【问题讨论】:

    标签: c# cookies browser webclient webrequest


    【解决方案1】:

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

    【讨论】:

    • 是的,我已经这么想了。但是,当 InternetSetCookie("abc.de",...) 不起作用时,如何将 Cookie 设置为 abc.de
    • 在 SO 上的 related question 中有。另请查看this FAQ,它更详细地解释了此行为。
    猜你喜欢
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2018-04-27
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多