Подтвердить что ты не робот

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

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

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

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

С наилучшими пожеланиями и благодарностью, Ян Оливер

4b9b3361

Ответ 1

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

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

Образец имеет два todo для хранения (чтение/запись). Для хранения я бы просто использовал SharedPreferences для хранения всего необходимого cookie сеанса и не сохранял других.

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

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

Ответ 2

Используйте CookieSyncManager, чтобы сохранить ваше значение cookie. Он может сохраняться при запуске приложений.

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

ИЗМЕНИТЬ

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

Этот класс устарел на уровне API 21. Теперь WebView автоматически синхронизирует файлы cookie при необходимости. Вам больше не нужно создавать или используйте CookieSyncManager. Чтобы вручную принудительно синхронизировать, вы можете использовать Метод cookieManager flush(), который является синхронной заменой для sync().

Ответ 4

После того, как вы сделаете свой 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

Ответ 5

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