Jbe*_*dev 5 cookies android http webview angularjs
背景:
我Webview在API 21中遇到了一个非常令人困惑的行为,在真实设备中进行测试时.
我有一个本地HTML5应用程序(内部资产文件夹)具有以下功能
问题:
执行登录请求后,服务器返回会话cookie.Webview使用API 21或更高版本的真实设备时,此cookie不会存储.如果我使用模拟器(在本例中为Genymotion),则会正确存储cookie.
更多信息:
执行身份验证的请求具有以下标头:
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
Run Code Online (Sandbox Code Playgroud)
通过以下回复:
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
Run Code Online (Sandbox Code Playgroud)
Cookie未存储在API 21或更高版本的设备中.相同的请求/响应在其余设备+所有模拟器中都能正常工作
澄清:
在app中启用此标志:
android.webkit.CookieManager.setAcceptFileSchemeCookies(true);
Run Code Online (Sandbox Code Playgroud)(在实例化CookieManager或webview之前,正如文档所述)
if(VERSION.SDK_INT >= 21) {
CookieManager.getInstance().setAcceptThirdPartyCookies(this.nativeWebView, true);
}
Run Code Online (Sandbox Code Playgroud)
如果在进行身份验证后,我访问cookie数据存储区并检查" hasCookies "方法,我明白了false.
两步auth服务实际上从相同的端点调用3个不同的路径.没有存储生成此服务的响应的cookie.我不知道这是否相关.
在进行简单身份验证(到不同的服务器)时,cookie会正确存储在所有设备模拟器中.
我正在使用Angular 1.5
我知道该服务正在使用http而不是https.这将在未来解决.
我在控制台中没有收到任何错误消息.
问题:
Web视图中是否存在阻止Cookie存储的内部安全措施?为什么它适用于仿真器(有根设备)而不是真实设备?这真让我烦恼.
小智 1
如果网络请求是使用 window.fetch 完成的,您可能需要添加:
fetch('/something', { credential: 'same-origin' }) // 或 'include'
在 chromium 上,window.fetch 的凭据标志默认设置为“省略”,并且没有 cookie 存储到 cookie 存储中。有关此错误的更多详细信息,请访问:https://bugs.chromium.org/p/chromium/issues/detail? id=477523
| 归档时间: |
|
| 查看次数: |
1054 次 |
| 最近记录: |