Intereting Posts
Android SQLiteOpenHelper – разные классы для каждой таблицы? Android: недавно добавленные списки песен с использованием медиа-магазина Как я могу отобразить диалоговое окно из приемника для широковещания Android? Android Button Styling Programmatically OnMessageReceived не вызван в WearableListenerService Календарь .YEAR, .MONTH, DAY_OF_MONTH отличается от date.getDay () и т. Д.? Как отформатировать предложение WHERE и?? В SQLite-запросе? Каков наиболее эффективный с точки зрения батареи подход использования LocalClient для периодического получения обновлений? Как я могу определить, какой размер (в пикселях) должен отображаться для Android, чтобы отображать это изображение правильно на устройствах? SetOnTabSelectedListener устарел, запрашивается при создании макета вкладки Picasso – получить путь загруженного изображения Как программно создать стиль темы Android? Ошибка android ndk-build на ubuntu 12.10 32 бит Google plus: Невозможно загрузить видимые круги Разница между реализацией MediaPlayer.create и setDataSource

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