Передача файлов cookie из HttpURLConnection (java.net.CookieManager) в WebView (android.webkit.CookieManager)
Я'видел ответы о том, как это должно работать со старым
DefaultHttpClient
но там нет хорошего примера дляHttpURLConnection
.
Я использую HttpURLConnection
для выполнения запросов к веб-приложению. В начале моего Android-приложения я использую CookieHandler.setDefault(new CookieManager())
для автоматической работы с сессионными куками, и это работает нормально.
В какой-то момент после входа в систему я хочу показать пользователю живые страницы из веб-приложения с помощью WebView
вместо загрузки данных за кулисами с помощью HttpURLConnection
. Однако я хочу использовать ту же сессию, которую я создал ранее, чтобы пользователю не пришлось снова входить в систему.
Как мне скопировать куки из java.net.CookieManager
, используемого HttpURLConnection
, в android.webkit.CookieManager
, используемый WebView
, чтобы я мог разделить сессию?
Я хотел бы предложить совершенно другой подход к решению вашей проблемы. Вместо того, чтобы копировать куки из одного места в другое (ручная синхронизация), давайте заставим HttpURLConnection и WebViews использовать одно и то же хранилище куки.
Это полностью устранит необходимость в синхронизации. Любой cookie, обновленный в одном из них, будет немедленно и автоматически отражен в другом.
Для этого создайте свою собственную реализацию java.net.CookieManager, которая перенаправляет все запросы к WebViews' webkit android.webkit.CookieManager.
Реализация:
и, наконец, использовать его, сделав это при инициализации вашего приложения:
По сравнению с
DefaultHttpClient
, здесь есть несколько дополнительных шагов. Ключевое отличие заключается в том, как получить доступ к существующим cookies вHTTPURLConnection
:CookieHandler.getDefault()
и привести результат кjava.net.CookieManager
.getCookieStore()
для доступа к хранилищу cookie.get()
для доступа к списку файлов cookie для заданногоURI
.Вот полный пример:
Я волшебным образом решил все свои проблемы с cookie с помощью одной строки в onCreate:
CookieHandler.setDefault(new CookieManager());
.У меня была такая же проблема, и это мое решение :
Сразу после входа в систему (он's важно, потому что и прежде, вы можете быть Дон'Т есть печенье еще), используя httpurlconnection пост (после getResponseCode), я делаю :
(где печенье является публичной строку в моем классе)
И в своей деятельности объект WebView, где я хочу, чтобы отобразить веб-страницы с сервера, используя WebView, что я делаю :
Как мой WebView это в фрагмент, мне пришлось использовать getActivity() для контекста, я также должен был указать андроид.в WebKit. прежде чем cookiemanager, как в противном случае он не может быть решен (импорт java.net вместо Android.менеджер в WebKit печенье).
cookie-это та же строка, что и выше (в моем фрагмент, я должен был восстановить его с помощью :
и в мой класс MainActivity, я пошлю его :
Я надеюсь, что это может помочь !