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

Author: janoliver, 2010-11-03

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(...)

 10
Author: cistearns,
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 () .

 18
Author: Heath Borders,
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

Https://github.com/loopj/android-async-http/blob/master/library/src/main/java/com/loopj/android/http/PersistentCookieStore.java

 4
Author: jptsetung,
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

 3
Author: Jim,
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

 0
Author: Augusto Picciani,
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