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的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能覆盖 WebView 'copy:' 方法?

为啥我的js不能在swift的webview里运行

scrollView 中的 webView 不能滚动?

为啥我不能使用 Webview 加载我的本地页面

android中,使用webview作界面,不能满屏。一进入界面时是正常的,左右操作的时候,发现界面不能满屏....

android中webView加载H5,JS不能调用问题的解决