如何在android WebView客户端中设置cookie

Tix*_*eon 12 cookies android webview asynchttpclient

我想通过WebView调用一个特定的URL .该页面只能在用户登录后调用.我使用AsyncHttpClient库执行登录调用.成功登录后,通过WebView加载URL 似乎无法识别正确的标头esp cookie.我怀疑是在HttpClientWebView的HttpClient之间cookie没有正确同步.知道为什么吗?.这是我如何使用WebView

    final WebView webView = (WebView) content.findViewById(R.id.web_travel_advisory);
    String url = "http://mydomainurl.com/get_data_after_login";

    webView.setWebViewClient(new WebViewClient());

    CookieSyncManager.createInstance(getActivity());
    CookieSyncManager.getInstance().startSync();
    CookieManager.getInstance().setAcceptCookie(true);

    webView.getSettings().setJavaScriptEnabled(true);

    webView.loadUrl(url);
Run Code Online (Sandbox Code Playgroud)

感谢你的帮助.

Tix*_*eon 27

哦,几个小时后,我终于弄清楚它是否有效.首先,根据doc,自api 21以来,不推荐在更高版本的android上使用CookieSyncManager.因此决定不再使用它了.其次,CookieManager用于存储WebView的 cookie .

最终代码

    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);

    List<Cookie> cookies = WSHelper.cookieStore.getCookies();

    cookieManager.removeAllCookie();

    if (cookies != null) {
        for (Cookie cookie : cookies) {
            if (cookie.getName().contains("session")){
                String cookieString = cookie.getName() + "=" + cookie.getValue() + "; Domain=" + cookie.getDomain();
                cookieManager.setCookie(cookie.getDomain(), cookieString);
                Log.d("CookieUrl",cookieString + " ");
            }
        }
    }
    webView.loadUrl(url);
Run Code Online (Sandbox Code Playgroud)

解决方案的关键变化是:使用cookie.getDomain()而不是显式域.

cookieManager.setCookie(cookie.getDomain(), cookieString);
Run Code Online (Sandbox Code Playgroud)

  • 什么是WSHelper? (10认同)