【问题标题】:Cordova session cookies don't work on Android LollipopCordova 会话 cookie 在 Android Lollipop 上不起作用
【发布时间】:2015-02-19 04:34:50
【问题描述】:

我为 Android 开发了一个 Cordova/Phonegap 应用程序,它使用会话 cookie 登录到第三方网站。 为此,我做了一个 AJAX 发布请求(使用 jQuery),然后自动设置 cookie。

但是,当我将智能手机更新到 Android Lollipop 5.0 并将应用程序库更新到 API 级别 21 时,cookie 停止工作。发生了什么变化?

【问题讨论】:

    标签: android ajax cordova cookies


    【解决方案1】:

    在互联网上花费数小时寻找可行的解决方案后,我发现了一篇很好地解释了该问题的文章,因此我将其发布在这里,因为我认为它会对其他 Stack Overflow 用户有用。

    基本上,问题在于新的 Android 第三方 cookie 政策 (https://developer.android.com/about/versions/android-5.0-changes.html#BehaviorWebView),默认情况下会阻止它们。

    解决方法是在主activity中添加几行代码:

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.init();
    
        // Allow third party cookies for Android Lollipop
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            WebView webView = (WebView)super.appView;
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptThirdPartyCookies(webView,true);
        }
    
        super.loadUrl(Config.getStartUrl());
    }
    

    更多信息,我在这里放了一个完整文章的链接:http://joashpereira.com/blog/2014/11/19/fix-to-cordovaphonegap-apps-targeting-android-5-lollipop-or-later-on-default-disallowing-third-party-cookies/

    【讨论】:

    • 即使您不使用 Cordova,同样的解决方案也是应用程序 - 只是在进行 ajax 调用的 web 视图中使用 javascripts。
    • 这默认应用到Cordova Android 3.7.1,另见issuecommit。因此,在使用这篇文章之前,请查看您的 CordovaWebView 文件。
    • 谢谢!这种行为与我用来构建应用程序的 Qt WebView 不同。它现在真的应该出现在每个介绍性的 Android WebView 教程中,因为它与过去和其他实现的行为不同。
    • @josemmo 如果我们在同一个活动中有两个 webviews 我们应该声明 cookieManager.setAcceptThirdPartyCookies(webView,true);对于他们两个?我只希望第一个 webview 可以使用第二个 webview 的 cookie。
    • @user1788736,您需要调用setAcceptThirdPartyCookies 到您想要拥有cookie 的每个WebView,尽管我认为仅使用这行代码无法实现这种级别的自定义。也许发布一个新问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2023-03-11
    • 2018-04-02
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多