Webview 不能接受 cookie
Posted
技术标签:
【中文标题】Webview 不能接受 cookie【英文标题】:Webview cannot accept cookies 【发布时间】:2016-03-04 02:15:17 【问题描述】:我正在创建一个基于 WebView 的 android 应用程序,使用户能够登录到移动运营商。当我运行应用程序时,WebView 会打开网站,但我收到一条消息,指出 WebView 不允许使用 cookie。我尝试了在这里找到的各种代码,但没有一个有效。谁能帮我?这是我正在使用的代码:
//in oncreate
final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this);
final CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
String[] cookies = getCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
for (String cookie : cookies)
cookieManager.setCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register", cookie);
cookieSyncManager.sync();
webView.loadUrl("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
还有 getCookies 方法:
public String[] getCookie(String siteName)
CookieManager cookieManager = CookieManager.getInstance();
String cookies = cookieManager.getCookie(siteName);
String[] cookiesArray = cookies.split(";");
return cookiesArray;
【问题讨论】:
您得到的关于 webview 不允许 cookie 的确切信息是什么?您是否将其视为 UI 上的警报或 logcat 中的消息或其他地方? @keno 我从他们的网站收到一条消息说 cookie 不可用 【参考方案1】:尝试重写shouldOverrideUrlLoading
方法以使您的WebView 处理所有URL 链接,而不是在任何链接上启动新浏览器。
webview.setWebViewClient(new WebViewClient()
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
return false;
);
webview.loadUrl(url);
如果这不起作用,您可以更换您的
cookieManager.setAcceptCookie(true);
到
cookieManager.setAcceptThirdPartyCookies(true);
因为cookieManager.setAcceptCookie(true);
不适用于棒棒糖。
【讨论】:
【参考方案2】:你检查过Android documentation吗?
如果您使用的 API 级别 >= 21,WebView 会自动同步 cookie。
如果不试试这个:
final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this);
final CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
cookieManager.setAcceptCookie(true);
String[] cookies = getCookie(cookieManager, "https://myaccount.ee.co.uk/login-dispatch/?fa=register");
for (String cookie : cookies)
cookieManager.setCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register", cookie);
cookieSyncManager.sync();
webView.loadUrl("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
getCookies:
public String[] getCookie(CookieManager cookieManager, String siteName)
String cookies = cookieManager.getCookie(siteName);
String[] cookiesArray=cookies.split(";");
return cookiesArray;
【讨论】:
你能试试把 setAcceptCookie 改成 setAcceptThirdPartyCookies(webView, true)【参考方案3】:您必须启用 javascript,然后获取 cookie 管理器实例接受 cookie 通过使用 javascriptenable cookie 被存储
webView.getSettings().setJavaScriptEnabled(true); CookieManager.getInstance().setAcceptCookie(true);
【讨论】:
【参考方案4】:通常登录需要javascript,请尝试在loadUrl
之前添加:
webView.getSettings().setJavaScriptEnabled(true);
【讨论】:
【参考方案5】:@Darko。
CookieManager.getInstance()
是整个应用程序的 CookieManager 实例。因此,您可以为应用程序中的所有 Web 视图启用或禁用 cookie。
通常,如果您的 webview 已经初始化,它应该可以工作:http://developer.android.com/reference/android/webkit/CookieManager.html#getInstance()
也许你在初始化你的 webview 之前调用CookieManager.getInstance().setAcceptCookie(true);
。
谢谢,
【讨论】:
以上是关于Webview 不能接受 cookie的主要内容,如果未能解决你的问题,请参考以下文章