ANDROID : Anteil Sitzung zwischen Webview und httpclient
Habe ich tatsächlich eine protokollierte Sitzung in meinem WebView.
Aber ich benutze auch httpclient zum senden und abrufen von Daten aus dem web. Ich sah im internet, dass es unmöglich ist, sich den Inhalt einer WebView, so ich brauchte, um meine httpclient, um Daten von einem webservice.
Das problem ist, dass dieser webservice nutzt sessions... und meine session ist in meinem WebView, also die httpclient hat es nicht und ich kann nicht auf die Inhalte des webservice.
Sehe ich viele Beiträge über dieses problem, aber ich Verstand nicht die Lösung.
Hier ist, was ich Tat, auf meine onPageStarted :
CookieManager mgr = CookieManager.getInstance();
Log.i( "URL", url );
Log.i("Cookie",mgr.getCookie("mywebsite.com"));
String cookie_string = mgr.getCookie("mywebsite.com");
if(cookie_string.length() > 1) {
Data.instance().getPref().edit().putString("cookie",cookie_string).commit();
}
Sah ich, dass ich diese Art von Dingen, so dass ich hoffe, dass diejenigen, sind session zu:
(ich Entferne die Zahl)
__utma=......(number)......;
__utmc=number;
__utmz=number.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);
wt3_eid=%number%number;
wt3_sid=%number
Dann weiß ich nicht, was zu tun ist, um dieses cookie in meinem httpclient. Ich versuche, dass, ohne Erfolg :
HttpClient client = new DefaultHttpClient();
BasicCookieStore cookieStore = new BasicCookieStore();
String login_cookie_string = Data.instance().getPref().getString("cookie", "");
String[] cookie_parts = null;
if(login_cookie_string.length()> 0)
{
//debug_view.setText(login_cookie_string);
Log.d("COOKIE", login_cookie_string);
cookie_parts = login_cookie_string.split(";");
for(int t=0;t < cookie_parts.length;t++)
{
String[] cookieContent = cookie_parts[t].split("=");
Cookie login_cookie = new BasicClientCookie(cookieContent[0],cookieContent[1]);
((BasicClientCookie) login_cookie).setDomain("mywebsite.com");
cookieStore.addCookie(login_cookie);
}
}
((AbstractHttpClient) client).setCookieStore(cookieStore);
- Route den Datenverkehr durch einen proxy wie WebScarab oder Fiddler verwenden, um herauszufinden, die verbleibenden Unterschiede zwischen WebView und httpclient-Anfragen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also , das ist, was ich Tat und es funktionierte für mich -
Nun die-Implementierung für die getCookieFromAppCookieManager ist wie folgt -
Die Methode bekommt die cookies für eine bestimmte URL aus der Anwendung CookieManager. Die Anwendung CookieManager verwaltet die cookies verwendet, die eine Anwendung der WebView-Instanzen.
Folgen dieses tuto :
http://metatroid.com/article/Android:%20handling%20web%20service%20authentication
=============================== Hier die Inhalte der Webseite =====
Etwas, was Sie vielleicht finden sich dabei im Android-web-Authentifizierung.
Die meisten Webseiten, auf die Frage ein cookie zu verfolgen session-ID ' s und immer ein Benutzer angemeldet. Um diese Authentifizierung verwendet, müssen Sie die cookies behalten synchronisiert zwischen den Aktivitäten und zwischen http-clients und webviews.
Die Methode, die ich am Ende machen, die scheint zu funktionieren gut genug, war die Erstellung einer Klasse, die Sie erweitert die Anwendung, und definieren Sie dann ein einziges HttpClient verwendet werden, während der rest der Anwendung. Das code sieht so aus:
Dieser Klasse erzeugt auch einen HttpClient, der geeignet ist für AsyncTasks und machen mehrere gleichzeitige http-Anfragen. Mit ThreadSafeClientConnManager für die ClientConnectionManager wir führen Sie http-Anfragen im AsyncTasks, ohne dass eine Kraft schließen, wenn Sie drücken Sie die zurück-Taste und starten Sie eine zweite oder Dritte.
Schafft es auch eine einzelne Standard-cookie-Speicher zugreifen können, die in all Ihren Aktivitäten. Verwenden Sie diese in Ihrer weiteren Aktivitäten durch den Aufruf der getClient () - Methode.
Beispielsweise
Wenn Sie finden es notwendig, einen webview und es brauchen, um Zugang und Nutzung die gleichen cookies wie Ihre Kunden. Sie können eine Synchronisierung der client die cookie-Speicher mit CookieManager: (in onPageStarted Methode)
Werden Sie wechseln müssen example.com mit der richtigen domain.