2013-08-12 43 views
5

C#のWebBrowserはIEを含む他のWebBrowserのインスタンスとCookieを共有するので、WebBrowserにはCookieを共有しない独自のCookieコンテナが必要です以前はIEなどで作成されていました。.NET WebBrowserがIEやその他のインスタンスとCookieを共有しないようにする

たとえばWebBrowserを作成するときにCookieを使用しないでください。 WebBrowserの2つのインスタンスを実行すると、独自のCookieコンテナがあり、Cookieを共有または競合しません。

どうすればこの問題を解決できますか?

答えて

3

あなたはInternetSetOption Win32関数を使用してプロセスごとにこれを行うことができます:

[DllImport("wininet.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)] 
public static extern bool InternetSetOption(int hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); 

してから、アプリケーションの起動時に次の関数を呼び出します。

private unsafe void SuppressWininetBehavior() 
{ 
    /* SOURCE: http://msdn.microsoft.com/en-us/library/windows/desktop/aa385328%28v=vs.85%29.aspx 
    * INTERNET_OPTION_SUPPRESS_BEHAVIOR (81): 
    *  A general purpose option that is used to suppress behaviors on a process-wide basis. 
    *  The lpBuffer parameter of the function must be a pointer to a DWORD containing the specific behavior to suppress. 
    *  This option cannot be queried with InternetQueryOption. 
    *  
    * INTERNET_SUPPRESS_COOKIE_PERSIST (3): 
    *  Suppresses the persistence of cookies, even if the server has specified them as persistent. 
    *  Version: Requires Internet Explorer 8.0 or later. 
    */ 


    int option = (int)3/* INTERNET_SUPPRESS_COOKIE_PERSIST*/; 
    int* optionPtr = &option; 

    bool success = InternetSetOption(0, 81/*INTERNET_OPTION_SUPPRESS_BEHAVIOR*/, new IntPtr(optionPtr), sizeof(int)); 
    if (!success) 
    { 
     MessageBox.Show("Something went wrong !>?"); 
    } 
} 
+0

は、スレッドごとにこれを実行することが可能ですか? – EBAG

+0

私はそうは思わない。結局のところ、使用しているWebBrowserコントロールが、Internet Explorerを表すネイティブCOMオブジェクトのラッパーに過ぎないことを忘れないでください。 –

+0

共有クッキーについては、スレッド単位でさえも可能だとは思いません。セッションはWebBrowserインスタンスのプロセスごとに共有されます。同様の[質問](http://stackoverflow.com/questions/18055734/net-webbrowser-control-and-dispose/18057266#18057266)です。 – Noseratio

関連する問題