Android WebView在重定向中丢失Cookie

时间:2013-12-09 12:49:12

标签: android cookies webview

我的问题是WebView处理重定向和自定义Cookie。

我做了以下事情:

  1. 在应用创建
  2. 中创建CookieSyncManagerCookieManager的实例
  3. 在util class
  4. 的静态部分中调用sCookieManager.setAcceptCookie(true);
  5. 致电sCookieManager.setCookie(url, value); sCookieSyncManager.sync();
  6. 最后mWebView.loadUrl
  7. 服务器端发生的事情是它首先获取我设置的正确cookie,运行一些重定向并且cookie似乎丢失了。任何想法,我在这里做错了什么?

    我已经尝试在另一个线程中运行setCookie - sync然后loadUrl,但它没有帮助。

    所有类似的帖子似乎都有不起作用的解决方案。

    感谢。

    更新:

    我注意到使用setCookie来提供多个Cookie,例如:

    setCookie("MyCookie=value; Domain=mydomain.com; Path=/; Secure; HttpOnly; MySecondCookie=value2....)"
    

    只应用第一个,然后当服务器在其自己的域上运行重定向时它就消失了。 此问题可以在循环中一次修复设置自定义Cookie。

    我已在handler.proceed();暂时添加了onReceivedSslError,我可以从日志中看到它在网站重定向之前触发并且Cookie在下一页onPageFinished中丢失,是否会有安全cookie和无效证书链之间的某些联系?

1 个答案:

答案 0 :(得分:2)

尝试不使用

sCookieManager.setCookie(url, value) 

但是

sCookieManager.setCookie(cookieDomain, value)

你可以找到cookieDomain,例如使用chrome:// inspect

工作示例:

String cookieDomain = ".www.drive2.ru";
String siteUrl = "https://drive2.ru";

webView = (WebView) getView().findViewById(R.id.web_view);
webView.setWebViewClient(new WebViewClient()); // force open any new url in same webview (whether it is user click or redirect)

CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.setCookie(cookieDomain, "cookieName=cookieValue");
webView.loadUrl(siteUrl);