2010-06-25 212 views
1

大家好,感谢您花时间阅读本文。我有一个C#应用程序,我希望覆盖默认的WinInet cookie设置。我们的目标是,即使系统WinInet Cookie隐私设置被设置为“全部阻止”,在我的流程中,Cookie仍然会被接受。阅读文档,它看起来很直接。这里是什么,我有一个清理版本:WinInet InternetSetOption与INTERNET_OPTION_SUPPRESS_BEHAVIOR选项不能按预期方式工作

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上测试这个。

+0

你得到了什么错误?我猜测调用这个API需要提升权限。 – 2010-06-25 18:44:54

+0

吉姆,谢谢你的问题 - 实际上,没有错误返回。调用成功,但我看不到cookie处理的更改。呼叫的效果只适用于当前流程,因此提升不应该成为问题。 – Ross 2010-06-25 21:04:28

回答

0

尝试InternetSetPerSiteCookieDecision()。你将不得不下沉DWebBrowserEvents2 :: OnBeforeNavigate并为每个域调用它,但它应该工作。

此外,您正在使用错误的标志。如果您想禁用cookie策略,请使用INTERNET_SUPPRESS_COOKIE_POLICY。通过使用RESET标志,你是启用的默认策略。

+0

感谢您的回答。我的问题包含了一个错误,因为我试验了不同的标志值。 INTERNET_SUPPRESS_COOKIE_POLICY也似乎没有效果。 我不想使用InternetSetPerSiteCookieDecision(),因为我不想更改用户的设置。 INTERNET_OPTION_SUPPRESS_BEHAVIOR似乎是理想的解决方案,因为它只影响当前的过程...如果它能工作。 – Ross 2010-06-28 19:18:54