Intereting Posts
Отладка с использованием виртуальной машины, такой как VMWare / VirtualBox? Как мы можем использовать android: inputType в EditTextPreference? Пример проекта Android не работает из-за: Срок действия сертификата отладки Android NDK: как получить динамическую архитектуру компилятора в Android.mk Как мне создать новую активность, где у меня будет возможность добавлять новые элементы из базы данных? Получить значение поля «Изменить текст» Инициализация Android AudioRecord терпит неудачу каждый раз Почему для MediaPlayer для Android требуется много времени для подготовки некоторых живых потоков для воспроизведения? Есть ли способ установить ro.kernel.qemu в 0 в эмуляторе? Как использовать метод showAlert в Android? Android DatePicker не распознает, когда год был изменен путем ввода Приложение Android phonegap, имеющее проблемы с SQlite и локальным хранилищем на устройствах Samsung Galaxy Android: RecyclerView в вертикальном представлении Родной андроид-шрифтFamily не вступает в силу Listview не обновляется при вызове notifydatasetchanged ()

Android Cookies для IP-адреса

У меня HttpSessions с количеством серверов. Основная проблема заключалась в том, что если я войду в систему через WebView, то мои файлы cookie недоступны для http-соединения. Я исправил его с извлечением файла cookie для моего URL-адреса и установил его как заголовок Cookie для всего моего http-соединения с этим URL-адресом.

Но проблема, которую я не могу решить, заключается в том, что если у меня есть IP-адрес в качестве URL-адреса хоста сервера, то попытка получить cookie с CookieManager.getInstance (). GetCookie (ipAddress) возвращает значение null.

Должен ли я сделать псевдоним для моего IP-сервера? Или, может быть, есть решение с клиентской стороны, потому что в моем приложении iOS он работает хорошо.

Одна вещь – я еще не пробовал по IP-адресу. Мой IP-адрес также содержит номер порта, но файлы cookie не доступны для порта, поэтому я думаю, что они должны быть доступны с getCookie (« http: // MY_IP »), но это не так. Но я думаю, что это может быть новый сюрприз, и номер порта может нарушить логику.

В нашем приложении мы столкнулись с той же проблемой. Мы закончили использование библиотеки OkHttp Square, которая быстрее и проще, чем обычные и Android-файлы. Вы можете добавить его, добавив эти строки в свой build.gradle:

compile 'com.squareup.okhttp:okhttp-urlconnection:2.1.0' compile 'com.squareup.okhttp:okhttp:2.1.0' 

Как только это будет сделано, мы установим, что файлы cookie должны быть разделены между webview и OkHttp. Я уверен, что есть способ сделать это и с клиентом Http по умолчанию:

 public static OkHttpClient getClient(){ OkHttpClient okHttpClient = new OkHttpClient(); //set cookies as shared across webview and web requests WebkitCookieManagerProxy coreCookieManager = new WebkitCookieManagerProxy(null, java.net.CookiePolicy.ACCEPT_ALL); java.net.CookieHandler.setDefault(coreCookieManager); okHttpClient.setCookieHandler(coreCookieManager); return okHttpClient; } 

WebkitCookieManagerProxy выглядит следующим образом:

 //sets cookies as the same across WebView and HttpUrlConnection public class WebkitCookieManagerProxy extends CookieManager{ private android.webkit.CookieManager webkitCookieManager; public WebkitCookieManagerProxy() { this(null, null); } public WebkitCookieManagerProxy(CookieStore store, CookiePolicy cookiePolicy) { super(null, cookiePolicy); this.webkitCookieManager = android.webkit.CookieManager.getInstance(); } @Override public void put(URI uri, Map<String, List<String>> responseHeaders) throws IOException { // make sure our args are valid if ((uri == null) || (responseHeaders == null)) return; // save our url once String url = uri.toString(); // go over the headers for (String headerKey : responseHeaders.keySet()) { // ignore headers which aren't cookie related if ((headerKey == null) || !(headerKey.equalsIgnoreCase("Set-Cookie2") || headerKey.equalsIgnoreCase("Set-Cookie"))) continue; // process each of the headers for (String headerValue : responseHeaders.get(headerKey)) { this.webkitCookieManager.setCookie(url, headerValue); } } } @Override public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders) throws IOException { // make sure our args are valid if ((uri == null) || (requestHeaders == null)) throw new IllegalArgumentException("Argument is null"); // save our url once String url = uri.toString(); // prepare our response Map<String, List<String>> res = new java.util.HashMap<String, List<String>>(); // get the cookie String cookie = this.webkitCookieManager.getCookie(url); // return it if (cookie != null) res.put("Cookie", Arrays.asList(cookie)); return res; } @Override public CookieStore getCookieStore() { // we don't want anyone to work with this cookie store directly throw new UnsupportedOperationException(); } } 

Теперь, когда вы входите в систему с веб-просмотром, файлы cookie будут совместно использоваться с http-запросами (если вы используете OkHttpClient).