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

如何在不使用Javascript的情况下在webbrowser控件中设置和删除域的cookie( 如果不首先导航到网站,则不允许设置/删除cookie。

通过组合这两个来管理完成这项任务:

http://support.microsoft.com/kb/815718

和INTERNET_OPTION_END_BROWSER_SESSION – http://msdn.microsoft.com/en-us/library/windows/desktop/aa385328(v=vs.85).aspx

希望这可以帮助

using System.Runtime.InteropServices; namespace Storm8 { class Program { [DllImport("wininet.dll", SetLastError = true)] private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool InternetGetCookie( string lpszUrlName, string lpszCookieName, StringBuilder lpszCookieData, [MarshalAs(UnmanagedType.U4)] ref int lpdwSize ); [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool InternetSetCookie( string lpszUrlName, string lpszCookieName, string lpszCookieData ); [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool InternetSetOption( int hInternet, int dwOption, string lpBuffer, int dwBufferLength ); [STAThread] static void Main(string[] args) { InternetSetOption(0, 42, null, 0); InternetSetCookie("http://domain.name.com", "cookiename", "cookievalue"); WebBrowser wb = new WebBrowser(); string testUrl = "http://domain.name.com/fight.php?showAttackBg=true"; string additionalHeaders = "User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit /528.18 (KHTML, like Gecko) Mobile/7A341" + Environment.NewLine + "Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" + Environment.NewLine + "Accept-Language: en-gb"; if (wb.Document == null) wb.Navigate(testUrl, null, null, additionalHeaders); while (wb.Document == null) Application.DoEvents(); Console.WriteLine("\nPress any key to continue..."); Console.ReadKey(true); } } } 

参考

IE使用WinInet函数进行联网,因此您可以使用WinInet的cookie函数来更改cookie。 更新:需求要求按进程设置。 由于缓存文件夹位置未存储在IE设置注册表项IDocHostUIHandler2 :: GetOverrideKeyPath将无法正常工作。 我不知道在进程级别自定义cookie文件夹位置的方法,除了挂钩所有WinInet API(并坚持更新应用程序以适应未来的WinInet API)。

这是一篇关于如何使用wininet删除WebBrowser中的cookie的博客文章。

http://www.alphatecit.com.au/code-snippets/facebook-c-sdk-multiple-login-problem-resolved/

这是一个更好的解决方案,只清除cookie(C / C ++):

 #include  #include  ... DWORD dwSuppress = INTERNET_SUPPRESS_COOKIE_PERSIST; InternetSetOption(0, INTERNET_OPTION_SUPPRESS_BEHAVIOR, &dwSuppress, sizeof(DWORD)); 

此博客文章 (C#)的所有学分。 不要忘记查看InternetSetOption和INTERNET_SUPPRESS_COOKIE_PERSIST的文档

您无法删除当前站点域以外的域的cookie。

要执行您要求的操作,您需要访问机器(即安装了工具栏)。 即便如此,它仍然是愚蠢的。

唯一的例外是,如果您使用的是cookie使用*通配符的域,例如* .stackoverflow.com。 如果您使用通配符更改cookie,则所有子子域(即blog.stackoverflow.com)都将具有访问权限并查看对cookie所做的更改。