2017-12-09 103 views
13

Kể từ khi phát hành Chrome 63 trên Android, vào ngày 6/12/2017, tôi đã gặp sự cố với các công ty của tôi dựa trên ứng dụng Android Cordova. Ứng dụng này bao gồm IFrame cho phép người dùng điều hướng các phần của trang web thương mại điện tử của công ty tôi từ bên trong ứng dụng.Ứng dụng Android Cordova với IFrames Chrome 63 Không có yêu cầu Tiêu đề Cookie

Điều hướng giữa các trang được tải trong IFrame không còn gửi bất kỳ thông tin cookie nào trong Tiêu đề yêu cầu.

Thông tin như Id phiên được lưu trữ trong cookie không được chuyển sang trang tiếp theo, điều này sẽ khiến trang tiếp theo bắt đầu một phiên người dùng hoàn toàn mới! Tuy nhiên, điều kỳ lạ là bất kỳ cuộc gọi AJAX nào được tạo sẵn trong một trang trên IFrame (ví dụ: Để lấy số mục trong rổ) và yêu cầu nội dung (css js, tệp hình ảnh, v.v.) gửi thông tin cookie trong yêu cầu tiêu đề tốt. Id phiên trong các tiêu đề này giống hệt nhau giữa các trang, biểu thị sự kiên trì phiên.

Cookie đang được tạo ok và tôi có thể thấy chúng khi sử dụng các công cụ dành cho nhà phát triển Chrome trong bảng điều khiển Ứng dụng trong miền công ty. Họ chỉ không được chuyển sang trang tiếp theo.

Tôi gặp sự cố này trên thiết bị Android 7.1.1. Khi tôi vô hiệu hóa ứng dụng Chrome trên thiết bị này, các tiêu đề yêu cầu cookie trong IFrame trong ứng dụng bắt đầu hoạt động tốt trở lại, có lẽ Cordova Webview không còn sử dụng Chrome khi nó bị tắt?

Có ai biết điều gì có thể gây ra sự cố này không? Có thể liên quan đến cookie SameSite hoặc thay đổi cách ly trang web nghiêm ngặt hoặc các thay đổi liên quan đến bảo mật khác trong Chrome 63 không?

Vấn đề này dường tương tự như lỗi này Chromium đã được cố định tháng 10 năm 2016: https://bugs.chromium.org/p/chromium/issues/detail?id=634311

WebView không tuy nhiên đã cookie Bên thứ ba được kích hoạt trong lớp SystemCookieManager của thư viện Cordova (Cordova Android 6.4.0):

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

Xin lỗi nếu tôi chưa chỉ định bất kỳ điều gì đủ rõ ràng. Tôi rất sẵn lòng cung cấp thêm thông tin nếu có ai đó có thể trợ giúp về vấn đề này.

+0

Chúng tôi có cùng một vấn đề, cảm ơn mô tả. Có vẻ như việc sử dụng khung nội tuyến ở Cordova không phải là bằng chứng tương lai, nó sẽ tiếp tục bị hạn chế về bảo mật. Chúng tôi đang xem xét việc sử dụng themeablebrowser hoặc cordova inappbrowser. – Jerem

+0

Điều này dường như không phải là điều trên WebView của Chrome so với hệ thống, nhưng hoàn toàn là phiên bản có liên quan. Trên điện thoại của tôi, tôi có Hệ thống WebView v63 và Chrome v62. Với cài đặt này, ứng dụng sẽ gặp phải sự cố được mô tả. Nếu tôi xóa các bản cập nhật của WebView hệ thống, sự cố sẽ biến mất. Tôi không có cách nào để buộc Chrome cập nhật lên v63, v62 là phiên bản mới nhất mà tôi có thể cài đặt. Vì vậy, tôi không thể nói chắc chắn, mà động cơ/phiên bản được sử dụng trong trường hợp đó. –

Trả lời

2

Đây là cách để tái tạo sự cố mà không cần Cordova. Nó sử dụng http://httpbin.org/cookies/set?k2=v2&k1=v1 để kiểm tra cookie. Với Android System WebView v. 63 các cookie không được gửi. Với các phiên bản trước, chúng được gửi đi. Tôi hy vọng nó có thể giúp tìm câu trả lời cho câu hỏi. Dưới đây là một liên kết đến các dự án Android đầy đủ: https://www.dropbox.com/s/s53wfy71uou11rh/test-webview.zip?dl=0

MainActivity.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; 
    } 
} 

html/main.html (tài sản thư mục)

<html> 
<head> 
    <base href="file:///android_asset/html/"> 
    <link type="text/css" rel="stylesheet" href="../css/main.css" /> 
</head> 
<body> 
    <iframe src="http://httpbin.org/cookies/set?k1=v1&k2=v2" frameborder="0"></iframe> 
</body> 

css/chính.css (trong thư mục tài sản)

html, 
body, 
iframe { 
    width: 100%; 
    height: 100%; 
} 
+0

Điều này dường như được sửa trong bản cập nhật Android System WebView 63.0.3239.107. Thử nghiệm trên Samsung J5 (SM-J500H) với Android 6.0.1 – mihai1990

9

Lỗi này đã được nộp và quyết in the Chromium Bug tracker. Theo các nhà phát triển Chromium, chúng tôi không thể làm gì từ phía ứng dụng của mọi thứ.

+3

Lỗi này đã được khắc phục bằng bản phát hành Chrome/Android Webview mới nhất (phiên bản 63.0.3239.111). Các vấn đề chúng tôi gặp phải với các ứng dụng của chúng tôi đã được giải quyết. – user1491571

0

Đây là một lỗi trong Chrome, nó đã được cố định. Tôi đã cập nhật lại Chrome và nó hoạt động tốt trên thiết bị của tôi.

Điều chúng ta có thể học được từ điều này là Cordova phụ thuộc vào các ứng dụng khác ...

Các vấn đề liên quan