2016-05-13 4 views
3

Lets für Cookie-Speicherung vorbereiten:Mehrere Cookies in Cookie

CookieSyncManager.createInstance(getApplicationContext()); 
CookieSyncManager.getInstance().startSync(); 
CookieManager.getInstance().setAcceptCookie(true); 

Dann manuell einige Cookies Ich setze, sagen wir mal PHPSESSID und RANDOM

CookieManager.getInstance().setCookie("domain.com", "PHPSESSID="+phpSession); 
CookieManager.getInstance().setCookie("domain.com", "RANDOM="+random); 

lässt Prüfung funktioniert es mit:

CookieManager.getInstance().getCookie("domain.com"); 

und bekam

PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56; RANDOM=266284790:1466147978:c91d0896bac59e0b 

Alles sieht gut aus, aber wenn ich zu einer der WebView Aktivitäten App navigieren in kann, die gleiche Domain Website auch einstellen Cookies öffnen, wenn ich dann Cookie drucken wie oben sieht es wie folgt aus:

PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56; 
RANDOM=266284790:1466147978:c91d0896bac59e0b; 
PHPSESSID=9ecb5156cf8fc3190fbc69fd13393243; 
RANDOM=265078219%3A1463147975%3Ad0448d163e9b2123 

doppelte Einträge ... wenn ich danach manuell neu z RANDOM mit setCookie:

PHPSESSID=dba4ff392agd39b5951d10a91a0a7b56; 
RANDOM=111111111:2222222222:33333336bac59e0b; 
PHPSESSID=9ecb5156cf8fc3190fbc69fd13393243; 
RANDOM=265078219%3A1463147975%3Ad0448d163e9b2123 

Werte von WebView werden nicht überschrieben, nur meine „von Hand“ eingegeben ... wie WebView zu zwingen, meinen früheren Set-Cookie zu verwenden oder zu überschreiben bereits eingestellt?

+0

Haben Sie den Grund für dieses Verhalten gefunden? –

+0

Ich habe am Anfang (checked) gefunden, dass ein Cookie existiert, wenn nicht, dann öffne ich 'WebView' (erstellt" dynamisch "in' Activity' von 'new WebView (this)', Größe 1x1) mit URL , die nur Cookie setzen soll. Danach benutze ich diesen Cookie für Webapi-Anfragen. nicht so gut behoben IMHO, aber ich habe keine bessere Lösung gefunden:/ – snachmsm

Antwort

0
private void setCookieManager(String auth_token) { 
    CookieSyncManager manager = CookieSyncManager.createInstance(this); 
    CookieManager cookieManager = CookieManager.getInstance(); 
    cookieManager.setAcceptCookie(true); 
    cookieManager.removeSessionCookie(); 
    cookieManager.setCookie(auth_token); 

    manager.sync(); 
} 

Ich glaube, Sie haben Ihren Cookie-Manager nicht richtig eingerichtet. Geben Sie dies versuchen, ein

+0

Ich gebe derzeit einen Versuch wie oben ... Ich will nicht 'removeSessionCookie();', sollte es gehalten werden, und ich 's syncing ('manager.sync();') nach jedem manuellen Einfügen und in 'onPause' in Aktivitäten mit' WebView' – snachmsm

2

Wie in the MDN docs about Set-Cookie können Sie viele verschiedene Arten von Cookie-Werte sehen, die ein Cookie kann Path

Cookie-name = Cookie-Wert auf bestimmte festgelegt werden; Path = Pfad-Wert

Und in CookieManager.setCookievoid setCookie (String url, String value), die android reference sagt:

Setzt ein Cookie für die angegebene URL. Alle vorhandenen Cookies mit demselben Host, Pfad und Name werden durch den neuen Cookie ersetzt. Der gesetzte Cookie wird ignoriert, wenn er abgelaufen ist.

Meiner Meinung nach ist der Grund, dass Sie doppelte Einträge haben, weil die Cookie-Werte in verschiedenen Path waren. Also, wenn Sie überschreiben möchten, sollten Sie sicherstellen, Host Pfadname sind die gleichen.