在自定义控件中向WebBrowser添加cookie

时间:2014-03-01 22:59:16

标签: c# .net winforms cookies webbrowser-control

我正在尝试在HttpWebRequestWebBrowser控件之间共享会话Cookie。它工作正常,直到我将WebBrowser移动到自定义控件中。

当我尝试添加cookie时,它不会被设置。我已经确认了我发送的cookie的价值,它只是没有添加到浏览器的cookie字符串中。

生成Cookie:

// cookieJar used for the previous HttpWebRequest
CookieCollection cc = cookieJar.GetCookies(the_url);

StringBuilder sb = new StringBuilder();
foreach (Cookie cook in cc)
{
    sb.Append(cook.ToString() + ";");
}
// Confirmed cookie value below is correct: "PHPSESSID=21....";
return sb.ToString();

Cookie被发送到自定义控件:

// bc is my custom BrowserControl()
bc.add_cookie(c); // Fails in here

Cookie被添加到WebBrowser(不工作):

// Custom control method
public void add_cookie(string c)
{
    // I check both values here - all looks correct
    browser.Document.Cookie = c;
    // I check both values again here - nothing has changed
}

浏览器的cookie值(之前和之后 - 不发生更改):

// google analytics cookie (I believe)
__utma=323...; __utmb=235235...; __utmz=25235.236523.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=42346346

请记住,在将WebBrowser移动到自定义控件之前,此代码正在运行。如果没有解决方案,我可以恢复更改,但我试图避免这种情况。

简而言之:为什么只有在自定义控件中才将cookie添加到WebBrowser中?

1 个答案:

答案 0 :(得分:0)

Cookie不是一切,还有会话身份验证缓存,您无法复制。 WebBrowser使用UrlMon库,因此正确的方法是使用其他UrlMon API,例如URLOpenStreamURLDownloadToFileURLDownloadToCacheFile

此方法允许使用WebBrowser控件下载同一会话中的任何资源。可以通过P / invoke从C#调用UrlMon API,这里是related answer。在同一会话中也可以upload data