清除Web浏览器控制所有站点的cookie而不清除IE本身

时间:2010-03-11 20:40:50

标签: c# .net internet-explorer cookies browser

编辑:据我所知,这个问题没有解决办法,这再次证明了一个人不应该使用C#的WebBrowser。我们在程序开始时结束了警告标志,通知用户将为IE清除cookie。

我想要做的简短版本是标题。这是长版本。

我有一个复杂的问题,我相信我会收到很多猜测作为回应。为了使预期但不幸的无用猜测保持在最低限度,让我首先提一下这个问题的解决方案并不简单,所以简单的建议遗憾的是根本没有帮助,即使我很欣赏这些努力。

.NET WebBrowser组件基本上是IE本身,因此具有任何类型警告的解决方案几乎肯定不会起作用。我需要做的正是我正在做的事情,即使是一个看似微不足道的警告也会彻底打败这个目的。冒着傲慢的风险,我需要那些真正深入了解.NET WebBrowser和/或WinInet和/或如何通过C#与Windows底层系统进行通信的人的帮助......或者如何封装C ++代码C#。

那就是说,我不希望有人为我这样做,我发现了一些有希望的提示,这些提示将在本期后面解释。

但首先......我想要实现的是这个。

我有一个包含WebBrowser控件的Windows.Forms组件。这种控制需要:

  1. 清除所有网站的所有Cookie。
  2. 一个接一个地访问多个网站,并记录cookie并正确处理它们。这部分工作正常,所以我对此没有任何问题。
  3. 在理论上永远冲洗并重复......
  4. 现在,这是真正的问题。我需要清除所有这些cookie(对于任何和所有站点),但仅限于WebBrowser控件本身而不是IE正确使用的cookie。这种方法的根本原因当然是.NET WebBrowser控件 IE。但我是一个固执的年轻人,我坚持认为这是可能的,否则! ;)

    这就是我现在被困住的地方。

    完全不可能通过C#以编程方式清除WebBrowser控件的所有cookie。必须使用DllImport和它附带的所有疯狂的东西。这个块可以用于此目的:

    [DllImport("wininet.dll", SetLastError = true)]
    private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); 

    然后,在实际清除cookie的函数中:

    InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);
    

    然后所有的cookie都被清除了,因此,我很高兴。该程序完全按照预期工作,除了它还清除IE的cookie,这是不允许发生的。

    来自StackOverflower的一位同事(如果这是一个词),盛江在评论中提出了另一个问题,但没有进一步阐述:

    “如果要隔离应用程序的cookie,则需要通过IDocHostUIHandler2 :: GetOverrideKeyPath覆盖Cache目录注册表设置”

    我在互联网上浏览了IDocHostUIHandler2和GetOverrideKeyPath,但我不知道如何在C#中使用它们来将cookie与我的WebBrowser控件隔离开来。我对Windows注册表的体验仅限于RegEdit(所以我知道它是一个具有不同数据类型的树结构,但就此而言......例如,我对注册表与IE的关系没有深入的了解。) p>

    这是我在MSDN上挖掘的内容:

    IDocHostUIHandler2文档: http://msdn.microsoft.com/en-us/library/aa753275%28VS.85%29.aspx

    GetOverrideKeyPath docs: http://msdn.microsoft.com/en-us/library/aa753274%28VS.85%29.aspx

    我想我大致知道这些事情是什么,我只是不知道 如何使用它们。

3 个答案:

答案 0 :(得分:4)

是否有必要让IE在IE 中同时运行?在程序运行后是否可以将原始cookie“恢复”回IE?

更新:

另一个想法:

我想知道如果您通过Impersonation在不同的用户帐户下运行您的程序会发生什么。它可能会将这些cookie存储在不同的Windows配置文件中......

答案 1 :(得分:2)

How to set and delete cookies from WebBrowser Control for arbitrary domains的评论是错误的。 WinInet缓存文件夹设置显然不在IE设置中,但是是Shell文件夹设置,因为IDocHostUIHandler2只能自定义存储在IE注册表项中的设置,这对此任务没有用。 我不知道自定义文件夹位置的方法,除了挂钩所有WinInet API(并坚持更新应用程序以适应未来的WinInet API),这在C#中并不容易。我现在将更新旧帖子。

答案 2 :(得分:0)

http://wiki.imacros.net/iimInit%28%29#Separate_Browser_Instances解释了一个解决方案。基本上iMacros使用IE InPrivate模式。