Android H5页面中iframe页面请求时没有携带Cook

2019-07-30  本文已影响0人  alexlee1987

一、问题描述

  最近修复一个日常开发很少遇到也很少会关注的问题,具体问题是在项目中接入了公司前端同事开发的H5页面,这个H5页面内部接入了第三方的页面(后面通过分析是以iframe方式嵌入H5页面的),从公司内部H5页面跳转到第三方页面时有些机型Cookie获取不到。具体现象如下图:


图1 内嵌页面没有携带Cookie

  问题分析:当H5页面中使用iframe内嵌一个页面时,由于内嵌页面和外部页面域名不同,导致cookie存在跨域的问题,,因此内嵌的页面无法获取外部页面的Cookie,内嵌页面在请求时也就无法携带外面页面的cookie。

二、解决方法

  通过查找资料发现CookieManager有接口设置可以解决cookie的跨域问题,具体是在Webview初始化时设置CookieManager.getInstance().setAcceptThirdPartyCookies(),代码设置如下:

if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
    CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView,true);
}

  官方文档对方法CookieManager.getInstance().setAcceptThirdPartyCookies(WebView webview, boolean accept)的说明:

英文:Sets whether the WebView should allow third party cookies to be set.
中文:设置WebView是否允许设置第三方的Cookie。

  设置CookieManager.getInstance().setAcceptThirdPartyCookies()之后抓包结果如下图,可以看到内嵌页面的访问已经携带Cookie了。

图2 内嵌页面携带Cookie了

  如果感觉我的文章对您有用,请给个喜欢,如果有疑问,也欢迎在下方留言,谢谢!!!

上一篇 下一篇

猜你喜欢

热点阅读