我正在尝试在HttpWebRequest
和WebBrowser
控件之间共享会话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中?
答案 0 :(得分:0)
Cookie不是一切,还有会话身份验证缓存,您无法复制。 WebBrowser
使用UrlMon
库,因此正确的方法是使用其他UrlMon
API,例如URLOpenStream
,URLDownloadToFile
或URLDownloadToCacheFile
。
此方法允许使用WebBrowser
控件下载同一会话中的任何资源。可以通过P / invoke从C#调用UrlMon
API,这里是related answer。在同一会话中也可以upload data。