Android: как хранить куки? - PullRequest
       18

Android: как хранить куки?

26 голосов
/ 03 ноября 2010

В моем приложении для Android каждое действие заполняется данными из XML-файла, который находится где-то в Интернете. Веб-сайт, предоставляющий эти файлы, имеет механизм входа в систему, который работает с файлами cookie.

Я знаю, как сделать HTTP-запрос на страницу входа и получить cookie-файл. Что я не знаю, так это то, как я могу сохранить его, чтобы использовать его одновременно и в других действиях, И когда приложение запустится в следующий раз. Файл cookie действителен в течение года, поэтому пользователь моего приложения должен войти в систему один раз, а затем никогда в течение целого года.

Как мне это сделать? Я много гуглил, но либо использовал неправильные ключевые слова, либо в интернете нет простых решений. Я надеюсь, что кто-то здесь может мне помочь.

С наилучшими пожеланиями и заранее спасибо, Ян Оливер

Ответы [ 5 ]

18 голосов
/ 17 февраля 2011

Используйте CookieSyncManager для хранения значения cookie. Может сохраняться при запуске приложения.

Остерегайтесь использования CookieSyncManager внутри WebViewClient # shouldInterceptRequest в KitKat. Будет тупик .

EDIT

CookieSyncManager устарел в API 21:

Этот класс устарел на уровне API 21. Теперь WebView автоматически синхронизирует куки при необходимости. Вам больше не нужно создавать или используйте CookieSyncManager. Для принудительной синхронизации вы можете использовать Метод CookieManager flush () , который является синхронной заменой * * Синхронизация тысячи двадцать-одиной () . * +1023 *

10 голосов
/ 03 ноября 2010

Похоже, что Android использует стандартную реализацию в памяти, поэтому вам необходимо создать собственное постоянное хранилище cookie.

В этом руководстве по Java описывается создание собственного постоянного хранилища с использованием реализации по умолчанию.http://download.oracle.com/javase/tutorial/networking/cookies/custom.html

В примере есть два задания для хранения (чтение / запись). Для хранения я бы просто использовал SharedPreferences для хранения только необходимого cookie-файла сеанса и не сохранял другие.

В примере используется хук отключения, а это не то, что вам нужно в Android.Вместо run () и ловушки у меня просто был бы новый публичный метод persist (), который сохраняет то, что вы хотите, хотя и требует, чтобы вы сохраняли () хранилище вручную.

Учитывая, что у вас есть толькоодин или два куки, которые имеют значение, вы можете сохранить их в надстройке (...)

4 голосов
/ 16 ноября 2011

LoopJ имеет встроенное постоянное хранилище cookie, которое может использоваться с или без рамки loopj

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

4 голосов
/ 03 ноября 2010

После того, как вы сделаете ваш http-вызов, вы можете получить cookie-файлы следующим образом:

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();
      }
   }
}

Чтобы отправить их обратно:

nameValuePairs.add(new BasicNameValuePair("PHPSESSID",phpsessid));
httppost.setEntity(new UrlEncodedFormEntity(aList));

aList - все ваше имяValuePairs

0 голосов
/ 10 апреля 2014

Я написал простой класс с именем CookieHelper и предоставил пример того, как использовать этот класс, чтобы помочь всем пользователям, сталкивающимся с той же проблемой: https://github.com/augustopicciani/HttpClient-save-cookies-to-file

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...