2010-06-25 32 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

相關問題