2013-11-26 106 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

相關問題