2012-05-15 12 views
12

Für Android CookieManager Klasse gibt es eine Methode - getCookie(String url).
Dafür müssen wir die richtige URL kennen.
Gibt es eine Möglichkeit, alle Cookies in CookieManager zu bekommen und die URLs zu erhalten. etwas wie getCookies ?? Dies ist nur zu überprüfen, ob ich etwas falsch in meinem url für getCookie(String url) Anruf gebe. Ich bekomme den Cookie nicht, wenn ich das gleiche anrufe.
Ich übergebe komplette IP address hier in URL. Etwas wie folgt aus: "xx.x.x.x"Wie erhalten Sie alle Cookies von CookieManager Android?

Dank
Mia

+0

Ich versuche Cookie von webview nach erfolgreicher zu extrahieren login- seinem einfachen - String cookieString = CookieManager.getInstance() getCookie ("xx.xxx); – mia

Antwort

0

Sie können use reflection zu sehen, die Cookie-Karte. Es heißt mCookieMap in 4.0.3 (und wahrscheinlich auch in früheren Versionen). Der Typ ist Karte>.

Dies ist keine gute Möglichkeit, da Sie riskieren, auf verschiedenen Geräten oder Betriebssystemversionen zu brechen, wenn sie nicht mCookieMap verwenden, aber CookieManager bietet keine öffentliche Möglichkeit zu wissen, welche URLs es besucht.

+0

Die Cookies in 4.2. .2 sind nativ gespeichert, also wird dies nicht funktionieren: http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/webkit/CookieManagerClassic.java – plinehan

+1

Ich wusste, dass es irgendwann brechen würde. :-) –

3

Ich habe den CookieManager mit dem java.net-Paket in meiner Android-Anwendung verwendet und es funktioniert wie ein Zauber. Hier ist ein Code-Schnipsel:

import java.net.CookieHandler; 
import java.net.CookieManager; 
import java.net.CookiePolicy; 
import java.net.HttpCookie; 
import java.util.List; 

private class MyCookieManager 
{  
    private CookieManager mCookieManager = null; 

    MyCookieManager() { 
     mCookieManager = new CookieManager(); 
     mCookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); 
     CookieHandler.setDefault(mCookieManager); 
    } 

    private List<HttpCookie> getCookies() { 
     if(mCookieManager == null) 
      return null; 
     else 
      return mCookieManager.getCookieStore().getCookies(); 
    } 

    public void clearCookies() { 
     if(mCookieManager != null) 
      mCookieManager.getCookieStore().removeAll(); 
    } 

    public boolean isCookieManagerEmpty() { 
     if(mCookieManager == null) 
      return true; 
     else 
      return mCookieManager.getCookieStore().getCookies().isEmpty(); 
    } 


    public String getCookieValue() { 
     String cookieValue = new String(); 

     if(!isCookieManagerEmpty()) { 
      for (HttpCookie eachCookie : getCookies()) 
       cookieValue = cookieValue + String.format("%s=%s; ", eachCookie.getName(), eachCookie.getValue()); 
     } 

     return cookieValue; 
    } 

} 
+0

@stan wenn ich getCookieValue() verwenden möchte, muss ich ein Objekt der MyCookieManager-Klasse erstellen und Konstruktor wird aufgerufen und jedes Mal, wenn ein neuer Instant von CookieManager generiert wird, ohne dass ein Cookie gespeichert wird Standard CookieManager, wo ich vorher Cookie gespeichert habe? –

+0

@ HarshalBhatt, es wird angenommen, dass Sie in Ihrer Anwendung eine einzelne Instanz von "MyCookieManager" erstellen und behalten. Wie auch immer, alle Instanzen sollten normalerweise den gleichen Satz von Cookies aus dem Standard-Cookie-Speicher zurückgeben (oder einen benutzerdefinierten Speicher, wenn Sie die Quelle ändern, um einen bestimmten Speicher im 'CookieManager'-Konstruktor bereitzustellen). – Stan

Verwandte Themen