#android #http #cookies #login #webview
#Android #http #файлы cookie #аутентификация #webview
Вопрос:
У меня есть действие, которое позволяет вам войти на страницу. В следующем действии он должен отобразить веб-страницу на основе cookie, если вход в систему был успешным. Файл cookie восстановлен, и я пытаюсь поместить его в WebView с помощью следующего кода:
Cookie sessionCookie = LoginWebView.cookie;
CookieSyncManager.createInstance(webview.this);
CookieManager cookieManager = CookieManager.getInstance();
if (sessionCookie != null) {
cookieManager.removeSessionCookie();
String cookieString = sessionCookie.getName() "=" sessionCookie.getValue() "; domain=" sessionCookie.getDomain();
Log.v(TAG, "COOKIE SYNC: " cookieString);
cookieManager.setCookie(domain, cookieString);
CookieSyncManager.getInstance().sync();
}
webView.setWebViewClient(new MyWebViewClient ());
webView.loadUrl("http://a_page.com/getpageiphone.aspx?p=home");
Это явно основано на коде из других вопросов здесь, в StackOverflow, но когда я загружаю веб-страницу, похоже, это не работает. Кажется, что с моим кодом что-то не так, но я не вижу, где, и я начинаю думать, что делаю что-то очень неправильное.
Комментарии:
1. я думаю, вам, возможно, придется указать путь к файлу cookie в вашей строке cookie. добавить «; Path=» sessionCookie.getPath();
Ответ №1:
Вы использовали эту строку —
if (sessionCookie != null) {
cookieManager.removeSessionCookie();
}
.
Чтобы гарантировать, что вы получаете новые cookie каждый раз.
Похоже, вы столкнулись с той же проблемой, что и я, проверьте ссылку ниже —
Устраняет проблему с Sessioncookie () в Android (code.google.com )
в нем говорится, что это removeSessionCookie()
реализовано в потоке, поэтому всякий раз, когда он вызывается; поток запускается, и после вашего setCookie(url, cookieString);
вызова он удаляет новый cookie, который вы только что установили. Таким образом, для некоторых устройств он работает хорошо, поскольку removeSessionCookie()
уже выполнен, в то время как для некоторых он удаляет cookie, и мы получаем эту проблему.
используя SystemClock.sleep(500);
, вы просто дали системе сначала завершить removeSessionCookie()
Я предлагаю вам удалить это removeSessionCookie();
, поскольку вы устанавливаете только один файл cookie, чтобы он не конфликтовал с другими файлами cookie. Ваш код будет работать без проблем.
Комментарии:
1. У меня тоже была похожая проблема; кажется, removeSessionCookie запускается параллельно, чтобы удалить недавно добавленный файл cookie. Спасибо за этот ответ.
2. Рад, что время, которое я вложил в эту проблему, помогло вам.
Ответ №2:
Прежде всего, обязательно прочитайте значения заголовка, которые выдает вам ваш веб-сайт. Вы можете определить это с помощью Wireshark.
Во-вторых, когда вы знаете, как выглядят cookie-файлы (на основе ваших значений Wireshark), вы должны попытаться достичь тех же значений в своем коде. Обязательно отладьте значения cookie и внесите коррективы в сам файл cookie, если он не совпадает.