2012-12-10 44 views
4

我希望網站無法讀取cookie或在webbrowser c#控制應用程序中寫入新的cookie。當webbrowser c#應用程序運行時,我寧願禁用所有網站的所有讀/寫cookie操作,如果不是,那麼我有一個應禁用讀/寫cookie操作的網站列表。禁用Cookie在web瀏覽器中讀取/寫入c#應用程序

我使用.NET 2.0框架,但也可以使用4.5

回答

3

您不僅可以在Web瀏覽器控制禁用cookie。該控件本質上是一個嵌入式Internet Explorer,並共享用戶的Internet Explorer設置。如果你不介意的Internet Explorer(也許你使用Chrome或Firefox瀏覽器瀏覽的其餘部分)所有其他情況下阻止cookies,您可以執行以下操作:

(來源:http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/90834f20-c89f-42f9-92a8-f67ccee3799a/

要阻止WebBrowser控件中的Cookie,您可以採取以下步驟 步驟,實際上,它與在IE中阻止Cookie相同。

  1. 在IE的「工具」菜單下選擇「Internet選項」
  2. 選擇「隱私」選項卡。
  3. 單擊「設置」組框中的「高級...」按鈕。
  4. 選中「覆蓋自動cookie處理」選項。
  5. 選中「Block」選項。
  6. 單擊「確定」

你也可以刪除所有的cookies,您訪問的網頁後,但我不認爲這將滿足您的是完全匿名的目標。

我做了一點挖掘,我認爲你可以使用InternetSetOptionINTERNET_SUPPRESS_COOKIE_PERSIST標誌。根據文檔,這隻適用於Internet Explorer 8及更高版本。

private const int INTERNET_OPTION_SUPPRESS_BEHAVIOR = 3; //INTERNET_SUPPRESS_COOKIE_PERSIST - Suppresses the persistence of cookies, even if the server has specified them as persistent. 

[DllImport("wininet.dll", SetLastError = true)] 
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); 

然後,當你初始化你的應用嘗試:

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SUPPRESS_BEHAVIOR, IntPtr.Zero, 0); 

希望這讓你在正確的軌道上。另請參見:

How to set and delete cookies from WebBrowser Control for arbitrary domains

How do I use InternetSetOption?

Clear Cookies Cache for Multiple WebBrowser Control with WinInet in Winform Application

+0

對「InternetSetOption」的調用錯誤。 – ramaral

2

您可以使用InternetSetOption與選項標誌INTERNET_OPTION_SUPPRESS_BEHAVIOR。 此選項標誌應與INTERNET_SUPPRESS_COOKIE_PERSIST選項一起使用。

public static class NativeMethods 
{ 
    [DllImport("wininet.dll", SetLastError = true)] 
    private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, 
               IntPtr lpBuffer, int lpdwBufferLength); 

    public static void SuppressCookiePersist() 
    { 
     int dwOption = 81; //INTERNET_OPTION_SUPPRESS_BEHAVIOR 
     int option = 3; // INTERNET_SUPPRESS_COOKIE_PERSIST 

     IntPtr optionPtr = Marshal.AllocHGlobal(sizeof(int)); 
     Marshal.WriteInt32(optionPtr, option); 

     InternetSetOption(IntPtr.Zero, dwOption, optionPtr, sizeof(int)); 
     Marshal.FreeHGlobal(optionPtr); 
    } 
} 

該設置是每過程有效的,因此該方法可以在任何地方被調用,但webBrowser.Navigate()之前。

注意:
- 需要Internet Explorer 8.0或更高版本。
- 重置使用int option = 4; //INTERNET_SUPPRESS_COOKIE_PERSIST_RESET

相關問題