Android: jak przechowywać pliki cookie?
W mojej aplikacji na Androida każda aktywność jest wypełniona danymi z pliku xml, który znajduje się gdzieś w sieci. Strona udostępniająca te pliki posiada mechanizm logowania, który współpracuje z plikami cookies.
Wiem, jak wykonać żądanie HTTP na stronie logowania i otrzymać plik cookie. To, czego Nie wiem, to jak mogę go przechowywać, aby ponownie użyć go w obu innych działaniach i kiedy aplikacja zostanie uruchomiona następnym razem. Plik cookie jest ważny przez rok, więc użytkownik mojej aplikacji powinien zalogować się raz, a następnie nigdy więcej na cały rok.
Jak to zrobić? Dużo wygooglowałem, ale albo użyłem niewłaściwych słów kluczowych, albo nie ma prostych rozwiązań w Internecie. Mam nadzieję, że ktoś mi pomoże.
Pozdrawiam i dziękuję z góry, Jan Oliver
5 answers
Wygląda na to, że Android używa domyślnej implementacji pamięci, więc będziesz musiał utworzyć własny trwały sklep z plikami cookie.
Ten samouczek Javy przedstawia tworzenie własnego trwałego sklepu z wykorzystaniem domyślnej implementacji. http://download.oracle.com/javase/tutorial/networking/cookies/custom.html
The sample has two todo ' s for storage (read/write) For storage I would just use SharedPreferences to store just the session cookie that you need i nie wytrwać żadnych innych.
Próbka używa haka zamykania, który nie jest tym, czego chcesz w Androidzie. Zamiast run () i Hooka miałbym po prostu nową publiczną metodę persist (), która zapisuje to, co chcesz, chociaż wymaga to, abyś persist () przechowywał ręcznie.
Biorąc pod uwagę, że masz tylko jeden lub dwa pliki cookie, które mają znaczenie, możesz je zapisać w add(...)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 18:54:44
Aby zapisać wartość pliku cookie, Użyj Menedżera CookieSyncManager
. Może utrzymywać się przez cały czas uruchamiania aplikacji.
Uwaga na używanie CookieSyncManager wewnątrz WebViewClient#shouldInterceptRequest Na Kitkacie. zostanie zablokowany .
EDIT
CookieSyncManager
był przestarzały w API 21:
Ta klasa była przestarzała w API na poziomie 21. WebView now automatycznie synchronizuje pliki cookie w razie potrzeby. Nie musisz już tworzyć lub użyć CookieSyncManager. Aby ręcznie wymusić synchronizację, możesz użyć Metoda CookieManager flush () która jest synchronicznym zamiennikiem dla sync () .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-09 15:39:30
LoopJ ma wbudowany trwały magazyn plików cookie, który może być używany z frameworkiem loopj lub bez niego
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-15 11:55:54
Po nawiązaniu połączenia http, możesz pobrać pliki cookie w ten sposób
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
Log.d(TAG,"no cookies received");
} else {
for (int i = 0; i < cookies.size(); i++) {
if(cookies.get(i).getName().contentEquals("PHPSESSID")) {
PHPSESSID = cookies.get(i).getValue();
}
}
}
Aby je odesłać:
nameValuePairs.add(new BasicNameValuePair("PHPSESSID",phpsessid));
httppost.setEntity(new UrlEncodedFormEntity(aList));
AList is all your nameValuePairs
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-28 10:26:59
Napisałem prostą klasę o nazwie CookieHelper i podałem przykład użycia tej klasy, aby pomóc wszystkim użytkownikom, którzy mają ten sam problem : https://github.com/augustopicciani/HttpClient-save-cookies-to-file
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-10 13:24:38