2013-11-26 2 views
5

Sto usando Geckfx22.0 e xulrunner22.0. Poiché GeckoWebBrowser in .Net condivide i cookie con tutte le altre istanze di GeckoWebBrowsers, vorrei che GeckoWebBrowser abbia il proprio contenitore di cookie che non condivide alcun cookie creato precedentemente in altri GeckoWebBrowser o in altre istanze.È possibile? GeckoFX può utilizzare CookieContainer separato per istanza?

Ad esempio, quando creo un GeckoWebBrowser non dovrebbe avere alcun cookie. E quando eseguo 2 istanze di GeckoWebBrowser hanno il loro contenitore di cookie e non condividono o non interagiscono tra loro.

Com'è possibile?

Ho provato vari modi possibili creando classi diverse e avviando geckofx ma quando si esegue un browser diverso contemporaneamente si condividono i cookie tra altri browser. Se rimuovo i cookie da un browser, lo stesso accade per altri browser. Ho iniziato il proxy e useragent in momenti diversi e il suo funziona, ma non posso applicare vari useragent per più browser contemporaneamente.

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; 
     } 
    } 

E per rimuovere i cookie che sto utilizzando codice seguente:

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

aiuto sarà apprezzato !!!

risposta

1

Si potrebbe provare l'attuazione il proprio responsabile del biscotto che supporta questa:

vedere unittest Register_AfterDefaultFactoryHasBeenUnregistered_NewCookieServiceIsUsedInsteadOfDefaultOne per un esempio di come fare questo.

Questo codice è attualmente testato e può contenere typeos

Questo codice richiede una versione più recente rispetto a 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

si può solo spiegare? – yasmuru

+0

La demo più semplice su come sostituire il servizio Xpcom "@ mozilla.org/cookieService; 1". (Ho il sospetto che si possa fare lo stesso per cookiemanager; 1 o forse cookiemanager funziona usando il cookieService). Funziona come questo TestCookieServiceFactory crea una nuova implementazione di "@ mozilla.org/cookieService; 1". (Il lavoro effettivo è delegato a una classe TestCookieService che implementa l'interfaccia nsICookieService.) Quindi il prima possibile all'avvio del programma (ovvero dopo XpCom.Init) viene chiamato TestCookieServiceFactory.Unregister() per rimuovere il servizio predefinito, quindi chiamare Register() per installarne uno nuovo. – Tom

+0

Grazie per la tua risposta, proverò che .. – yasmuru