草庐IT

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

coder 2024-05-20 原文

编辑:据我所知,这个问题没有解决方案,这再次证明了不应使用 C# 的 WebBrowser 这一事实。我们在程序开始时以警告标志告终,通知用户将针对 IE 清除 cookie。

我正在尝试做的简短版本在标题中。这是长版。

我有一个有点复杂的问题,我相信我会收到很多猜测作为回应。为了将善意但不幸的是无用的猜测降到最低,让我首先提到这个问题的解决方案并不简单,所以不幸的是简单的建议根本没有帮助,即使我很感激你所做的努力。

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

也就是说,我不希望任何人为我做这件事,而且我发现了一些有希望的提示,这些提示稍后会在这个问题中进行解释。

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

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

  1. 清除所有网站的所有 cookie。
  2. 依次访问多个网站,并记录 cookie 并正确处理它们。这部分已经可以正常工作了,所以我对此没有任何问题。
  3. 冲洗并重复……理论上永远。

现在,真正的问题来了。我需要清除所有这些 cookie(对于任何和所有站点),但仅限于 WebBrowser 控件本身,而不是 IE 正确使用的 cookie。这种方法的根本错误当然是 .NET WebBrowser 控件 IE。但我是一个固执的年轻人,我坚持认为这是可能的,否则! ;)

这就是我目前遇到的问题。

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

[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 的一位同事(如果这是一个词),Sheng Jiang 在评论中针对不同的问题提出了这个,但没有进一步详细说明:

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

我在 Internet 上四处寻找 IDocHostUIHandler2 和 GetOverrideKeyPath,但我不知道如何在 C# 中使用它们将 cookie 隔离到我的 WebBrowser 控件。我对 Windows 注册表的经验仅限于 RegEdit(所以我知道它是一个具有不同数据类型的树结构,但仅此而已......例如,我对注册表与 IE 的关系没有深入的了解)。

这是我在 MSDN 上找到的内容:

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

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

我想我大概知道这些东西的作用,只是不知道如何使用它们。

最佳答案

是否需要同时在 IE 中使用 cookies? 程序运行后是否可以将原始 cookies“恢复”回 IE?

更新:

另一个想法:

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

关于c# - 清除 Web 浏览器控制所有站点的 cookie,而不清除 IE 本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2428509/

有关c# - 清除 Web 浏览器控制所有站点的 cookie,而不清除 IE 本身的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  3. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  4. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  5. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  6. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  7. ruby - 在 Ruby 中用键盘诅咒数组浏览 - 2

    我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作

  8. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  9. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  10. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

随机推荐