2012-04-19 30 views
1

在我的C#應用​​程序中,我使用HTTPWebrequest等瀏覽網站。 在某個時間點,我想在WebBrowser控件中顯示網站。C#應用程序中的InternetSetCookie不適用於子域名

當前Cookies保存在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()); 

但是,當我取回餅乾從一個子域像

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

因爲URL格式的「http://ab.cde.de」是無效的IntersetSetCookie函數拋出異常。當我嘗試「http://www.cde.de」或「http://www.ab.cde.de」,而不是我沒有得到例外,但網站無法正確加載,因爲瀏覽器只發送請求中的五個cookie中的一個,我不知道爲什麼。

你有什麼想法我可以解決這個問題嗎?

回答

0

我認爲這種行爲出於安全原因是有意的。子站點上的站點可以由完全不同的人員託管在完全不同的服務器上,而不是由主站點上的站點管理。 Cookie可能包含敏感信息,因此網絡瀏覽器會阻止將它們發送到其他(子)域。

+0

是的我已經想過這樣的事情。但是當InternetSetCookie(「http://abc.de」,...)不起作用時,我怎樣才能將cookie設置爲http://abc.de? – Michael 2012-04-19 22:23:33

+0

在SO [相關問題](http://stackoverflow.com/questions/1189638/internet-explorer-xx-yy-website-problem)上。另請查看[本FAQ](http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx),更詳細地解釋了這種行爲。 – 2012-04-19 22:41:08

相關問題