在webbrowser c#应用程序中禁用Cookie读/写

时间:2012-12-10 00:03:14

标签: c# cookies webbrowser-control session-cookies httpcookie

我希望网站无法在webbrowser c#control应用程序中读取cookie或编写新的cookie。我希望在webbrowser c#应用程序运行时禁用所有网站的所有读/写cookie操作,如果没有,那么我有一个网站列表,其读/写cookie操作应该被禁用。

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

2 个答案:

答案 0 :(得分:3)

您无法仅在网络浏览器控件上禁用Cookie。该控件本质上是一个嵌入式Internet Explorer,并共享用户的Internet Explorer设置。如果您不介意在所有其他Internet Explorer实例上阻止cookie(也许您在浏览的其余部分使用Chrome或Firefox),则可以执行以下操作:

(来自: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.   
  5. 点击“设置”组框中的“高级...”按钮。
  6.   
  7. 选中“覆盖自动Cookie处理”选项。
  8.   
  9. 选中两个“阻止”选项。
  10.   
  11. 点击“确定”
  12.   

您也可以在访问页面后删除所有Cookie,但我认为这不会实现您完全匿名的目标。

我做了一点挖掘,我认为你可以使用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

答案 1 :(得分:3)

您可以将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