2013-06-11 10 views
7

Ich habe eine Android-Anwendung, die Anfragen an meinen Webserver sowohl über ein WebView als auch über einen HttpClient stellt. Ich synchronisiere Cookies zwischen den beiden mit einem CookieSyncManager. So weit, ist es gut.Lebenszyklus eines Session-Cookies in einem Android WebView/CookieSyncManager

Wenn meine Anwendung startet (innen onResume()), betreiben ich ein Stück Logik ähnlich den folgenden:

if (appHasBeenIdleFor30Minutes()) { 
    CookieManager cookieManager = CookieManager.getInstance(); 
    cookieManager.removeSessionCookie(); 
    CookieSyncManager.getInstance().sync(); 
} 

Dieses korrekt alle Session-Cookies setzt, die von den Benutzern früheren Sitzung festgelegt wurde. Meine Frage ist: wird dieses Verhalten regelmäßig von selbst passieren? Diese Frage (android webview or browser not deleting session cookies on device reboot) scheint darauf hinzudeuten, dass dies nicht der Fall ist. Wenn ich den cookie-sync'd HttpClient über einen Service verwende, werden Session-Cookies nicht gelöscht, was zu merkwürdigem serverseitigen Verhalten führt.

Ich konnte keine konkrete Dokumentation über den Lebenszyklus von Session-Cookies (Ablaufzeit = 0) in einem WebView/CookieSyncManager finden - hat sonst noch jemand mehr Glück gehabt?

+0

Ihre Frage und Antwort hat mir geholfen, aber ich würde Ihnen vorschlagen, dass Sie Cookies auf der Serverseite aus Sicherheitsgründen ablaufen. Jemand könnte den Cookie-Wert abfangen, und selbst wenn Sie ihn auf dem Client ablaufen lassen, könnte derselbe Wert verwendet werden, um die Sitzung zu entführen. Beachten Sie auch, dass Sie Ode über den Benutzer nicht vertrauenswürdig betrachten sollten und sie dieses Verhalten ändern könnten, indem Sie Ihre apk ändern oder sogar etwas wie Xposed Framework verwenden. – PSIXO

Antwort

13

erhielt ich eine Antwort direkt von einem Google-Ingenieur, der meinen Verdacht bestätigt:

Sie sind richtig, Session-Cookies im Lebenszyklus eines WebView nicht automatisch ablaufen. Wenn Probleme auftreten, können Sie alle Ihre Cookies löschen oder Ihre Sitzungscookies explizit mit einem leeren Wert überschreiben.

Der Code, den Sie sieht aus wie eine gute Abhilfe vorgeschlagen haben, werden nur bewusst dass Cookie Synchronisation eine CookieSyncManager mit nicht synchron ist - die StartSync(), stopSync() und sync() Befehle asynchron in einem Hintergrund ausgeführt werden, Faden.

TL; DR - Sitzungscookies laufen nicht ab, wenn ein WebView geschlossen wird, Sie müssen das selbst verwalten.

+5

Es wäre nett, wenn Sie einen Link zu dieser Antwort bereitstellen können. – marwinXXII

Verwandte Themen