【问题标题】:Disable Cookie read/write in webbrowser c# application在 webbrowser c# 应用程序中禁用 Cookie 读/写
【发布时间】:2012-11-27 09:53:59
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您不能仅在您的网络浏览器控件上禁用 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. 选中“覆盖自动 cookie 处理”选项。
    5. 选中两个“阻止”选项。
    6. 点击“确定”

    您也可以在访问页面后删除所有 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

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-25
        • 2018-09-05
        • 1970-01-01
        • 2010-10-13
        • 2021-11-14
        • 1970-01-01
        • 2023-04-05
        • 2010-10-06
        相关资源
        最近更新 更多