那可能吗 ? GeckoFX可以为每个实例使用单独的CookieContainer吗?

时间:2013-11-26 06:11:18

标签: c# winforms cookies geckofx

我正在使用Geckfx22.0xulrunner22.0。由于.Net中的GeckoWebBrowser与GeckoWebBrowsers的所有其他实例共享cookie,我希望GeckoWebBrowser拥有自己的cookie容器,该容器不共享之前在其他GeckoWebBrowsers或其他实例中创建的任何cookie。

例如,当我创建GeckoWebBrowser时,它不应该有任何cookie。当我运行2个GeckoWebBrowser实例时,他们拥有自己的cookie容器,并且不会彼此共享或冲突cookie。

这怎么可能?

我通过创建不同的类并启动geckofx尝试了各种可能的方法,但在同时运行不同的浏览器时,它在其他浏览器之间共享cookie。如果我从一个浏览器中删除cookie,其他浏览器也会发生同样的情况。我在不同时间发起了proxyuseragent及其工作,但无法同时为多个浏览器应用各种用户。

 public void Initiate()
    {
        Gecko.Xpcom.Initialize(AppDomain.CurrentDomain.BaseDirectory + "/xulrunner");
        if (this.IsProxySet)
        {
            Gecko.GeckoPreferences.User["network.proxy.http"] = this.Host;
            Gecko.GeckoPreferences.User["network.proxy.http_port"] = this.Port;
            Gecko.GeckoPreferences.User["network.proxy.type"] = 1;
        }
        if (IsUseragentSet)
        {
            Gecko.GeckoPreferences.User["general.useragent.override"] = this.Useragent;
        }
    }

要删除Cookie,我正在使用以下代码:

nsICookieManager CookieMan;
            CookieMan = Xpcom.GetService<nsICookieManager>("@mozilla.org/cookiemanager;1");
            CookieMan = Xpcom.QueryInterface<nsICookieManager>(CookieMan);
            CookieMan.RemoveAll(); 

帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:1)

您可以尝试实现支持此功能的cookie管理器:

请参阅unittest Register_AfterDefaultFactoryHasBeenUnregistered_NewCookieServiceIsUsedInsteadOfDefaultOne 有关如何执行此操作的示例。

此代码目前尚未经过测试,可能包含typeos

此代码需要比v22.0-0.6更新的geckofx版本

[Guid("c375fa80-150f-11d6-a618-0010a401eb10")]
    [ContractID(TestCookieServiceFactory.ContractID)]
    public class TestCookieServiceFactory
        : GenericOneClassNsFactory<TestCookieServiceFactory, TestCookieService>
    {
        public const string ContractID = "@mozilla.org/cookieService;1";
    }

 public class TestCookieService : nsICookieService
 {
   // Implement nsICookieService...       
 }

 public void Main()
 {
     Xpcom.Initialize("My Xulrunner/Fireofox location");
     var existingFactoryDetails = TestCookieServiceFactory.Unregister();
     TestCookieServiceFactory.Register();

     var browser = new GeckofxWebBrowser();
     // Add browser to form etc...
     browser.Navigate("http://SomeWebPageThatUsesCookies")

     // Cookie requests should now be sent to TestCookieService, process them as your want.
 }