2012-12-10 67 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

相关问题