将Cookie设置为Android中的webView

Joa*_*rom 19 cookies post android http

HttpResponse在检查用户名或密码是否正确时从服务器获取.当我加载url一个webview我想要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;
}
Run Code Online (Sandbox Code Playgroud)

我用loadUrl:

webView.loadUrl("http://a_page.com/getpage.aspx?p=home");
Run Code Online (Sandbox Code Playgroud)

我想我不是真正管理一个cookie,我不知道该怎么做.任何建议或解决方案?

Bry*_*eld 11

这真的很简单.

String cookieString = "cookie_name=cookie_value; path=/";
CookieManager.getInstance().setCookie(baseUrl, cookieString);
Run Code Online (Sandbox Code Playgroud)

cookieString格式与更传统的Set-CookieHTTP标头相同,并且baseUrl是cookie应属于的站点.


emm*_*mby 10

您可能想看一下这个解决方案:Android WebView Cookie问题


gio*_*.nl 10

我从我的经验中发现了一些让我头疼的评论:

  1. httphttps网址不同。设置 cookiehttp://www.example.com与设置 cookie 不同https://www.example.com
  2. 网址末尾的斜线也可以有所作为。在我的情况下https://www.example.com/有效但https://www.example.com不起作用。
  3. CookieManager.getInstance().setCookie正在执行异步操作。因此,如果您在设置 url 后立即加载它,则不能保证 cookie 已经被写入。为了防止意外和不稳定的行为,请使用 CookieManager#setCookie(String url, String value, ValueCallback callback) ( link ) 并在调用回调后开始加载 url。

我希望我的两分钱可以节省一些人的时间,这样你就不必像我一样面临同样的问题。


小智 5

如果你有很少的带有 cookie 的项目(就像我的例子),你应该将它与一些循环一起使用:

val cookiesList = listOf("key1=someValue1", "key2=someValue2", "key3=someValue3")
cookiesList.forEach { item ->
 CookieManager.getInstance().setCookie("http://someHost.com", item)
}
Run Code Online (Sandbox Code Playgroud)

不能像这样使用它:

CookieManager.getInstance().setCookie("http://someHost.com", "key1=someValue1;key2=someValue2;key3=someValue3")
Run Code Online (Sandbox Code Playgroud)


Sam*_*uís 5

您可能想看看我如何设置 webview cookie:

Android WebView Cookie 问题

在我的回答中,您可以看到我是如何处理这个问题的:

val cookieManager = CookieManager.getInstance()
cookieManager.acceptCookie()
cookieManager.setCookie(domain,"$cookieKey=$cookieValue")
cookieManager.setAcceptThirdPartyCookies(view.webViewTest,true)
Run Code Online (Sandbox Code Playgroud)