带有IFrames Chrome 63的Android Cordova应用程序无请求标题Cookie

著论准过秦,作赋拟子虚。这篇文章主要讲述带有IFrames Chrome 63的Android Cordova应用程序无请求标题Cookie相关的知识,希望能为你提供帮助。
自从android 63上的Chrome 63发布以来,2017年12月6日,我遇到了我公司基于Cordova的Android应用程序的问题。此应用程序包含IFrame,允许用户从应用程序中导航我公司的部分电子商务网站。
IFrame中加载的页面之间的导航不再在请求标头中发送任何cookie信息。
存储在cookie中的诸如Session Ids之类的信息不会传递到下一页,这反过来会导致下一页开始一个全新的用户会话!
然而,奇怪的是,在IFrame上的页面中执行的任何AJAX调用(例如,检索篮子中的项目数)和资产请求(css js,图像文件等)确实在请求标头中发送cookie信息。这些标头中的会话ID在页面之间是相同的,表示会话持久性。
正在创建Cookie,我可以在公司域下的“应用程序”面板中使用Chrome开发人员工具时看到它们。他们只是没有被传递到下一页。
我在Android 7.1.1设备上遇到过这个问题。当我在此设备上停用Chrome应用时,应用中IFrame中的Cookie请求标头会再次正常工作,可能是Cordova Webview在禁用时不再使用Chrome?
有谁知道可能导致这个问题的原因?是否与Chrome 63中的SameSite cookie或严格的站点隔离更改或其他与安全相关的更改有关?
该问题与2016年10月修复的Chromium bug类似:https://bugs.chromium.org/p/chromium/issues/detail?id=634311
但是,Webview确实在Cordova库的系统CookieManager类中启用了第三方cookie(Cordova Android 6.4.0):

if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.LOLLIPOP) { cookieManager.setAcceptThirdPartyCookies(webView, true); }

如果我没有明确说明任何内容,请道歉。如果有人可以帮助解决这个问题,我很乐意提供更多信息。
答案这个bug被提交并解决了in the Chromium Bug tracker。根据Chromium开发人员的说法,从App方面来看,我们无能为力。
另一答案这是一种在没有Cordova的情况下重现问题的方法。它使用http://httpbin.org/cookies/set?k2=v2& k1=v1来测试cookie。使用Android System WebView v.63,不会发送cookie。使用以前的版本,它们会被发送我希望它可以帮助找到问题的答案。以下是完整Android项目的链接:https://www.dropbox.com/s/s53wfy71uou11rh/test-webview.zip?dl=0
main activity.java
package com.example.mihai.twv; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.webkit.CookieManager; import android.webkit.WebView; import java.io.InputStream; public class MainActivity extends AppCompatActivity {WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWebView(); loadWebView(); }private void initWebView() { mWebView = (WebView) findViewById(R.id.webView); if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.LOLLIPOP) { CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true); } }private void loadWebView() { String url = "http://httpbin.org"; String html = getLocalFileContents("html/main.html"); mWebView.loadDataWithBaseURL(url, html, "text/html", "UTF-8", null); }private String getLocalFileContents(String filepath) { String response = ""; try { InputStream is = getAssets().open(filepath); int size = is.available(); StringBuilder builder = new StringBuilder(); byte[] buffer = new byte[size]; while (is.read(buffer) != -1) { builder.append(new String(buffer, "UTF-8")); } is.close(); response = builder.toString(); } catch (Exception e) { } return response; } }

【带有IFrames Chrome 63的Android Cordova应用程序无请求标题Cookie】html / main.html(在assets文件夹中)
< html> < head> < base href="file:///android_asset/html/"> < link type="text/css" rel="stylesheet" href="https://www.songbingjia.com/css/main.css" /> < /head> < body> < iframe src="http://img.readke.com/220523/0G6331044-0.jpg k2=v2" frameborder="0"> < /iframe> < /body>

css / main.css(在assets文件夹中)
html, body, iframe { width: 100%; height: 100%; }

另一答案这是Chrome中的一个错误,它已被修复。我再次更新了Chrome,现在我的设备上运行正常。
我们可以从中学到的是Cordova依赖其他应用......
另一答案如果您的IFrame在https网址上浏览,则Chrome 63会生成与Symantec生成的SSL证书相关联的安全警报。 Cordova应用程序不再接受IFrame中的导航
有关更多信息,请参见下文:https://security.googleblog.com/2017/09/chromes-plan-to-distrust-symantec.html

    推荐阅读