2016-02-19 6 views
5

पृष्ठभूमि:कुकीज़ Android Webview एपीआई 21 में जमा हो जाती है और नहीं कर रहे हैं अप

मैं एपीआई 21 में एंड्रॉयड Webview रों साथ एक बहुत ही भ्रामक व्यवहार का सामना कर रहा हूँ और जब वास्तविक उपकरणों में परीक्षण।

मैं एक स्थानीय HTML5 आवेदन (अंदर संपत्ति फ़ोल्डर) निम्नलिखित कार्यक्षमता

  • लॉगिन (2 कदम प्रमाणीकरण) के साथ की है।
  • प्रमाणीकरण के आधार पर वस्तुओं की एक सूची दिखाएं।

समस्या:

लॉगिन अनुरोध करने के बाद, सर्वर सत्र के साथ कुकी देता है। एपीआई 21 या ऊपर के साथ वास्तविक उपकरणों का उपयोग करते समय यह कुकी Webview में संग्रहीत नहीं होती है। अगर मैं अनुकरणकर्ताओं (इस मामले में जीनमोशन) का उपयोग करता हूं, तो कुकीज़ ठीक तरह से संग्रहित होती हैं।

अधिक जानकारी:

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Set-Cookie: JSESSIONID=4D169E8656DBEDFFA4D17FE8D436A5BA; Expires=Fri, 19-Feb-2016 14:27:55 GMT; Path=/; HttpOnly 
Content-Type: application/json;charset=UTF-8 
Content-Length: 43 
Date: Fri, 19 Feb 2016 14:17:55 GMT 

कुकी उपकरणों में संग्रहीत नहीं है:

POST http://myServer/j_spring_security_check HTTP/1.1 
Proxy-Connection: keep-alive 
Content-Length: 101 
access-control-allow-origin: * 
accept: application/json 
access-control-allow-credentials: true 
User-Agent: Framework/1.5.0 (Linux; U; Android 6.0.1; Nexus 5X Build/MMB29Q) App/0.1.1 
Origin: file:// 
content-type: application/x-www-form-urlencoded 
Accept-Language: en-US 
X-Requested-With: app.package 
Host: myServer 
निम्नलिखित प्रतिक्रिया के साथ

:

प्रमाणन करने के लिए अनुरोध के बाद हेडर गया है एपीआई 21 या अधिक के साथ।

  • इस झंडे ऐप में सक्षम हैं:: वही अनुरोध/प्रतिक्रिया उपकरणों + सभी emulators

    स्पष्टीकरण के बाकी हिस्सों में ठीक काम करता है

    android.webkit.CookieManager.setAcceptFileSchemeCookies(true); 
    

(पहले कुकी मैनेजर या वेबव्यू तत्काल है, क्योंकि documentation कहता है)

if(VERSION.SDK_INT >= 21) { 

    CookieManager.getInstance().setAcceptThirdPartyCookies(this.nativeWebView, true); 
} 
  • प्रमाणीकरण करने के बाद, मैं कुकीज़ डेटा स्टोर और जांच "hasCookies" विधि का उपयोग करते हैं, तो मैं false मिलता है।

  • दो चरण ऑथ सेवा वास्तव में एक ही अंतराल से 3 अलग-अलग पथों को कॉल करती है। कुकीज़ में से कोई भी नहीं जो कि इस सेवा को उत्पन्न करने वाली प्रतिक्रिया संग्रहीत की जाती है। मुझे नहीं पता कि यह प्रासंगिक है या नहीं।

  • सरल प्रमाणीकरण (एक अलग सर्वर पर) करते समय, कुकीज सभी डिवाइस अनुकरणकर्ताओं में ठीक से संग्रहीत होते हैं।

  • मैं कोणीय 1 का उपयोग कर रहा हूं।5

  • मुझे पता है कि सेवा https के बजाय http का उपयोग कर रही है। भविष्य में इसे हल किया जाएगा।

  • मुझे कंसोल में कोई त्रुटि संदेश नहीं मिलता है।

सवाल:

वहाँ WebViews में किसी भी आंतरिक सुरक्षा उपाय है कि कुकीज़ को अवरुद्ध के भंडारण? यह अनुकरणकर्ताओं (जो रूट डिवाइस हैं) पर क्यों काम करता है और वास्तविक उपकरणों में नहीं? यह वास्तव में मुझे खराब करता है।

उत्तर

1

नेटवर्क अनुरोध का उपयोग किया जाता है, तो आप को जोड़ने के लिए आवश्यकता हो सकती है window.fetch:

लाने ('/ कुछ', {साख: 'एक ही मूल के'}) // या

'शामिल'

क्रोमियम पर, window.fetch में क्रेडेंशियल्स ध्वज डिफ़ॉल्ट रूप से 'ओमिट' पर सेट होता है और कुकी स्टोरेज में कोई कुकी संग्रहीत नहीं होती है। इस बग के बारे में अधिक जानकारी यहां: https://bugs.chromium.org/p/chromium/issues/detail?id=477523

+0

हां, यह एक महत्वपूर्ण डेटा था: HTTP अनुरोध windows.fetch का उपयोग करके किया गया था ... – Jbeerdev

+0

इस मामले में "शामिल" काम करता है। – Jbeerdev

संबंधित मुद्दे