使用INTERNET_OPTION_SUPPRESS_BEHAVIOR选项的WinInet InternetSetOption未按预期工作

时间:2010-06-25 18:43:01

标签: c# cookies wininet suppress internetsetoption

大家好,感谢您花时间阅读本文。我有一个c#应用程序,我希望覆盖默认的WinInet cookie设置。目标是即使系统WinInet cookie隐私设置设置为Block All,在我的过程中,cookie仍将被接受。阅读文档,看起来很简单。这是我所拥有的清理版本:

private unsafe void SuppressWininetBehavior()
{
    int option = (int)WinInet.SuppressBehaviorFlags.INTERNET_SUPPRESS_COOKIE_POLICY;
    int* optionPtr = &option;

    bool success = WinInet.InternetSetOption(IntPtr.Zero, WinInet.InternetOption.INTERNET_OPTION_SUPPRESS_BEHAVIOR, new IntPtr(optionPtr), sizeof(int));

    if (!success)
    {
        _log.Warn("Failed in WinInet.InternetSetOption call with INTERNET_OPTION_SUPPRESS_BEHAVIOR, INTERNET_SUPPRESS_COOKIE_POLICY");
    }
}

WinInet.InternetSetOption定义为:

[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return : MarshalAs(UnmanagedType.Bool)]
public static extern bool InternetSetOption(IntPtr hInternet, InternetOption dwOption, IntPtr lpBuffer, int dwBufferLength);

常数是:

WinInet.InternetOption.INTERNET_OPTION_SUPPRESS_BEHAVIOR = 81
WinInet.SuppressBehaviorFlags.INTERNET_SUPPRESS_COOKIE_POLICY = 1

InternetSetOption调用成功 - 没有错误。

我还尝试将InternetOpen返回的全局Internet句柄作为InternetSetOption调用的第一个参数传递,并没有区别。 Cookie会继续在我的流程中被阻止。

我需要这样做的原因是我有一个嵌入式Flash Player ActiveX实例,可以发出Web请求。我已成功使用其他InternetSetOption调用来修改Flash在我的进程中使用的代理设置。我正在Windows 7上测试它。

1 个答案:

答案 0 :(得分:0)

试试InternetSetPerSiteCookieDecision()。您将不得不接收DWebBrowserEvents2 :: OnBeforeNavigate并为每个域调用它,但它应该可以工作。

另外,你使用了错误的标志。如果要禁用cookie策略,请使用INTERNET_SUPPRESS_COOKIE_POLICY。通过使用RESET标志,您启用默认策略。