【问题标题】:Android WebView not loading url SameSite=NoneAndroid WebView 未加载 url SameSite=None
【发布时间】:2020-03-04 04:33:45
【问题描述】:

我正在尝试加载网络(例如 www.google.com),但网络视图通过下一条消息发送到控制台:

http://google.com/ 的资源关联的 cookie 设置为 SameSite=None 但没有 Secure。 Chrome 的未来版本将 仅提供标记为 SameSite=None 的 cookie,前提是它们也被标记 Secure。您可以在以下开发人员工具中查看 cookie 应用程序>存储>Cookies 并在以下位置查看更多详细信息 https://www.chromestatus.com/feature/5633521622188032.",来源: https://www.google.com/

我不知道如何解决这个问题。我正在做下一个代码来加载一个 url,我该如何解决这个问题?

private void initWebView(String url){

        webViewTvWeakReference = new WeakReference<>(new WebView(getActivity()));
        webViewTvWeakReference.get().setId(TV_WEB_VIEW_ID);
        webViewTvWeakReference.get().setLayerType(View.LAYER_TYPE_HARDWARE, new Paint());
        webViewTvWeakReference.get().setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        webViewTvWeakReference.get().setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.lightBlueBackgroundColor));
        webViewTvWeakReference.get().requestFocusFromTouch();

        setUpWebSettings(webViewTvWeakReference.get());

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            CookieManager.getInstance().removeAllCookies(null);
        }

        Map<String, String> headers = new HashMap<>();
        headers.put("Set-Cookie", "HttpOnly;Secure;SameSite=Strict");

        if (BuildConfig.DEBUG) {
            webViewTvWeakReference.get().setWebViewClient(new WebViewClient() {
                @Override
                public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                    handler.proceed();
                }
            });
        }

        if(!url.isEmpty()){
            webViewTvWeakReference.get().loadUrl(url, headers);
        }else{
            webViewTvWeakReference.get().loadUrl("about:blank", headers);
        }

        webViewTvWeakReference.get().pauseTimers();     // WebView timers consumes a lot off CPU
        webViewTvWeakReference.get().resumeTimers();    // Pause and Resume timers fix this behaivour

    }

我已将下一行添加到标题中,但仍然无法正常工作。

headers.put("Set-Cookie", "HttpOnly;Secure;SameSite=Strict");

谢谢

【问题讨论】:

    标签: android cookies http-headers android-webview


    【解决方案1】:

    此警告专门针对来自google.com 的cookie,因此您不负责设置其属性。 Google 团队需要将相关属性应用到他们的 cookie 以解决此警告。

    如果您确实有任何 cookie 需要在跨站点/第三方上下文中发送,则需要使用以下方法设置它们:

    Set-Cookie: foo=bar; SameSite=None; Secure
    

    但是,在这个阶段,这个警告应该纯粹是信息性的。 cookie 仍在随请求一起发送,您应该不会在 WebView 中看到网站行为的任何问题。

    这些新限制将成为 Chrome 80 中的默认设置,但暂时不适用于 WebView。

    您可以在https://web.dev/samesite-cookies-explained 了解有关这些即将发生的变化的更多信息。

    此外,您可以通过将其指向 https://samesite-sandbox.glitch.me 来检查您的特定浏览器或 WebView 是否正在实施新行为。如果该矩阵全为绿色,则您的浏览器正在实施新限制。如果板上有任何红色或橙色,则您的浏览器尚未应用新的默认设置。

    【讨论】:

    • 在消息“与google.com 的资源关联的cookie 设置为SameSite=None 但没有安全...”之后,webview 仍然为空白,并且没有加载任何页面。我不知道该怎么办,我正在使用 google.com 进行测试。
    • 我在这里建立了一个小测试站点:samesite-sandbox.glitch.me,它将向您展示您的浏览器正在应用的默认行为。如果全部为绿色,则表示正在应用新的限制。如果不是全部为绿色,则这些警告不会对网站的功能产生任何影响。
    • 我不确定是远程cookie stteings 导致了消息的出现。看来问题是本地的!这些烦人的消息也有同样的问题!
    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2018-10-18
    相关资源
    最近更新 更多