在Android中将cookie设置为webView

| 检查用户名或密码是否正确时,我从服务器收到“ 0”字样。 当我将ѭ1装入ѭ2时,我希望
webView
拥有cookie(我将
postData()
得到的答案存储在
webView
中。 我希望webView提取cookie并使用存储在webview中的cookie加载URL。 我正在得到答复。
public HttpResponse postData() {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(\"https://example.com/login.aspx\");

    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair(\"txtUsername\", \"user\"));
        nameValuePairs.add(new BasicNameValuePair(\"txtPassword\", \"123\"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = httpclient.execute(httppost);
        String responseAsText = EntityUtils.toString(response.getEntity());
        Log.v(TAG , \"Response from req: \" + responseAsText);
        return responseAsText;

    } catch (ClientProtocolException e) {

    } catch (IOException e) {

    }
    return null;
}
我用以下方法加载网址:
webView.loadUrl(\"http://a_page.com/getpage.aspx?p=home\");
我想我实际上不是在管理Cookie,也不知道该怎么做。 有什么建议或解决方案吗?
已邀请:
您可能需要看一下以下解决方案:Android WebView Cookie问题
真的很简单。
String cookieString = \"cookie_name=cookie_value; path=/\";
CookieManager.getInstance().setCookie(baseUrl, cookieString);
其中“ 9”的格式与更传统的“ 10” HTTP标头相同,“ 11”是cookie所属的网站。
从我的经验中发现的一些评论让我头疼:
http
https
网址不同。为
http://www.example.com
设置cookie与为
https://www.example.com
设置cookie不同 网址末尾的斜线也可以有所作为。在我的情况下,
https://www.example.com/
起作用,但
https://www.example.com
不起作用。
CookieManager.getInstance().setCookie
正在执行异步操作。因此,如果在设置后立即加载URL,则不能保证cookie已经被写入。为了防止意外和不稳定的行为,请使用CookieManager#setCookie(String url,String value,ValueCallback callback)(link)并在调用回调之后开始加载URL。 我希望我的两分钱能节省一些人的时间,这样您就不必像我一样面对同样的问题。
如果您的Cookie项很少(例如我的情况),则应在一些循环中使用它:
val cookies = \"key1=someValue1;key2=someValue2;key3=someValue3\"
val cookiesList = cookies.split(\";\")
cookiesList.forEach { item ->
 CookieManager.getInstance().setCookie(\"http://someHost.com\", item)
}
您不能像这样使用它:
CookieManager.getInstance().setCookie(\"http://someHost.com\", \"key1=someValue1;key2=someValue2;key3=someValue3\")
只是想提出另一种方法可以做到这一点。没有说这是最好的,但这是一种方法。您也可以使用JavaScript设置cookie。只需在
WebViewClient
中覆盖
onPageFinished
new WebViewClient() {

        override fun onPageFinished(view: WebView, url: String) {

                val javascript = \"\"\"document.cookie = \"key=$value\"\"\"\"

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    view.evaluateJavascript(javascript) { s -> Timber.d(\"Inject: %s\", s) }
                } else {
                    view.loadUrl(\"javascript:\" + javascript, null)
                }
        }
}
这种方法的一件事:您将不得不重新加载webView。如果有人知道如何解决该问题,请发表评论。
您可能想看看我如何在以下位置设置webview cookie: Android WebView Cookie问题 在我的答案中,您可以看到我的处理方式:
val cookieManager = CookieManager.getInstance()
cookieManager.acceptCookie()
cookieManager.setCookie(domain,\"$cookieKey=$cookieValue\")
cookieManager.setAcceptThirdPartyCookies(view.webViewTest,true)

要回复问题请先登录注册