2013-11-26 164 views
5

我使用Geckfx22.0xulrunner22.0。由于.Net中的GeckoWebBrowser与所有其他GeckoWebBrowsers实例共享cookie,我希望GeckoWebBrowser拥有它自己的cookie容器,它不会共享之前在其他GeckoWebBrowsers或其他实例中创建的cookie。这可能吗? GeckoFX可以为每个实例使用独立的CookieContainer?

例如,当我创建一个GeckoWebBrowser时,它不应该有任何cookie。当我运行GeckoWebBrowser的2个实例时,他们拥有自己的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; 
     } 
    } 

,并删除我使用下面的代码饼干:

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

帮助将不胜感激!

回答

1

你可能尝试实施支持该你自己的cookie管理器:

看到单元测试Register_AfterDefaultFactoryHasBeenUnregistered_NewCookieServiceIsUsedInsteadOfDefaultOne 对于如何做到这一点的例子。

此代码是目前未经测试,可能含有typeos

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

[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. 
} 
+0

你可以解释一下吗? – yasmuru

+0

unittest演示如何替换Xpcom服务“@ mozilla.org/cookieService; 1”。 (我怀疑可以为cookiemanager做同样的事情; 1或者cookiemanager可以使用cookieService)。它像这样工作TestCookieServiceFactory创建“@ mozilla.org/cookieService; 1”的新实现。 (实际工作委托给一个实现了nsICookieService接口的TestCookieService类)。然后尽可能在程序启动时(即在XpCom.Init之后)调用TestCookieServiceFactory.Unregister()去除默认服务,然后调用Register()安装新的。 – Tom

+0

感谢您的回复,我会尽力... – yasmuru

相关问题