Cookies & Webview-CookieSyncManager в Android!

У меня есть действие, которое позволяет вам войти на страницу. В следующем действии он должен отображать веб-страницу на основе файла 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, но когда я загружаю веб-страницу, она, похоже, не работает. Кажется, что-то очень не так с моим кодом, но я не вижу, где, и я начинаю думаю, я делаю что-то очень неправильное.

2 ответов


вы использовали эту строку -

 if (sessionCookie != null) {
                          cookieManager.removeSessionCookie();

  }

. Чтобы каждый раз получать новые файлы cookie.

кажется, что вы прошли через ту же проблему, с которой я столкнулся, проверьте ниже ссылку -

removeSessionCookie () выпуск android (code.google.com)

он говорит, что removeSessionCookie() реализуется в потоке, поэтому, когда он вызывается, поток начинается и после setCookie(url, cookieString); вызывается, он удаляет новый cookie, который вы только что установили. Так что для некоторых устройства он работает хорошо, как removeSessionCookie() уже выполняется, в то время как для некоторых он удаляет cookie, и мы получаем эту проблему.

С помощью SystemClock.sleep(500);, вы просто дали системе закончить removeSessionCookie () сначала

Я предлагаю вам удалить этот removeSessionCookie(); поскольку вы устанавливаете только один файл cookie, он не будет конфликтовать с другими файлами cookie. Ваш код будет работать без проблем.


прежде всего, не забудьте прочитать значения заголовков, которые дает вам ваш сайт. Вы можете определить это через Wireshark.

во-вторых, когда вы знаете, как выглядит cookie (на основе ваших значений Wireshark), вы должны попытаться достичь тех же значений в своем коде. Не забудьте отладить значения cookie и внести изменения в сам файл cookie, если он не соответствует.