Tee*_*kin 16 .net c# browser cookies internet-explorer
编辑:据我所知,这个问题没有解决办法,这再次证明了一个人不应该使用C#的WebBrowser.我们在程序开始时发出警告标志,通知用户将清除IE的cookie.
我想要做的简短版本是标题.这是长版本.
我有一个复杂的问题,我相信我会收到很多猜测作为回应.为了将预期但不幸的无用猜测保持在最低限度,让我首先提一下这个问题的解决方案并不简单,所以简单的建议遗憾的是根本没有帮助,即使我很感激努力.
.NET WebBrowser组件基本上是IE本身,因此具有任何类型警告的解决方案几乎肯定不会起作用.我需要做的正是我正在做的事情,即使是一个看似微不足道的警告也会彻底打败这个目的.在探空傲慢的风险,我需要从别人谁真的有深入了解有关.NET web浏览器和/或WinInet的和/或如何使用Windows的底层系统从C#沟通...或如何封装C++代码帮助C#.
也就是说,我不希望有人为我这样做,我发现了一些有希望的提示,这些提示将在本期后面解释.
但首先......我想要实现的是这个.
我有一个Windows.Forms组件,其中包含一个WebBrowser控件.此控件需要:
现在,这是真正的问题.我需要清除所有这些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); Run Code Online (Sandbox Code Playgroud)
然后,在实际清除cookie的功能中:
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);
Run Code Online (Sandbox Code Playgroud)
然后所有的cookie都被清除了,因此,我很高兴.该程序完全按照预期工作,除了它还清除IE的cookie,这是不允许发生的.
来自StackOverflower的一位同事(如果只是一句话),盛江在评论中提出了一个不同的问题,但没有进一步阐述:
"如果要隔离应用程序的cookie,则需要通过IDocHostUIHandler2 :: GetOverrideKeyPath覆盖Cache目录注册表设置"
我在互联网上浏览了IDocHostUIHandler2和GetOverrideKeyPath,但我不知道如何在C#中使用它们来将cookie与我的WebBrowser控件隔离开来.我对Windows注册表的体验仅限于RegEdit(所以我理解它是一个具有不同数据类型的树结构,但就此而言......例如,我没有深入了解注册表与IE的关系).
这是我在MSDN上挖掘的内容:
IDocHostUIHandler2 docs: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
我想我大致知道这些事情的作用,我只是不知道如何使用它们.
是否需要同时在 IE 中启用 cookie ? 您的程序运行后是否可以将原始cookie“恢复”回IE?
更新:
另一个想法:
我想知道如果您通过模拟在不同的用户帐户下运行程序会发生什么。它可能会将这些 cookie 存储在不同的 Windows 配置文件下......