Cookie & Webview - CookieSyncManager в Android! - PullRequest
9 голосов
/ 20 апреля 2011

У меня есть действие, которое позволяет вам войти на страницу. В следующем упражнении должна отображаться веб-страница, основанная на cookie, если вход был успешным. Файл cookie извлекается, и я пытаюсь поместить его в веб-представление со следующим кодом:

    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 ]

9 голосов
/ 24 июля 2013

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

 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.Ваш код будет работать без проблем.

1 голос
/ 11 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...