4

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

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

4

2 回答 2

4

您不能仅在您的网络浏览器控件上禁用 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 控件中阻止 Cookies 可以采取以下步骤,其实和在 IE 中阻止 Cookies 是一样的。

  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);

希望这能让你走上正确的轨道。也可以看看:

如何从 WebBrowser Control 中为任意域设置和删除 cookie

如何使用 InternetSetOption?

在 Winform 应用程序中使用 WinInet 清除多个 WebBrowser 控件的 Cookie 缓存

于 2012-12-10T00:17:05.813 回答
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

于 2016-05-26T14:23:06.493 回答