今天给各位分享Androidwebviewcookie的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
关于Android的okHttp+webview的cookie跨域问题
一个原生电商项目,可能会需要接入一个合作方的H5项目(域名不一样),这就可能涉及到一下信息的共享的问题,信息共享的方式有很多种,最常用的就是cookie
比如购物车,登陆这样的信息和状态的维护,都会使用cookie的方式
原生项目一般涉及到2个方面:网络框架okHttp3 + Webview
okHttp3 = 一般存取以HttpUr(协议+域名+端口)的方式去存取cookie
取 =loadForRequest(httpUrl)
存 = saveFromResponse(httpUrl,cookies)
如果要使得不同的域名的接口都能拿到cookie信息,需要以该目标链接HttpUr保存一次cookie
webview一般使用域名就可以,下面的url只代表域名
webview收不到服务端的cookie
昨天项目中碰到了一个bug,我们的客户端webview加载了我们的一个新闻详情页,在详情页里面发表一条评论,但是刷新页面后,刚才发表的评论却没有显示在评论列表里。
第一直觉,用其他的浏览器试试这一流程,发现没有问题。
这就奇怪了,难道是webview的设置有问题吗?但是因为不知道新闻评论这个功能的前端后端逻辑,随便修改webview的设置只能是盲人摸象,乱改一通,就算改好了可能也不知道为什么这样改就可以了。
本着科(zhuang)学(bi)的精(yu)神(wang),我先仔细想了想几个可能导致bug的疑点:
一开始以为使用的缓存页面,所以没有刷出来评论,可用fiddler抓包发现2个现象:
抓包可以说明两件事:
所以找了下后端的开发,了解了下评论逻辑。上传的评论一般都需要审核(人工审核),但是为了能在审核之前让用户可以马上看到自己刚发表的评论(防止以为是个bug),所以在服务端把刚评论的message种到了cookie里面,只要拿到cookie就可以显示出评论了。
然而抓包过程中,并没有发现服务端发送任何cookie,查了很久,终于发现最终的原因:
在Android 4.4及以下的系统,webview是默认接收第三方cookie的。但是,从android 5.0开始,webview默认是不接受第三方cookie的。
我们的服务端和页面刚好不在同一个域里面,而我的测试机是android 6.0的,所以导致接受不到cookie。
既然知道了根源,也就好解决了,接收第三方cookie的开关是:
另外,注意到第一个参数是webview,说明这个设置不是全局的,这一点android官网也做了说明
所以, 如果新建了一个webview,这个webview默认还是不接收第三方cookie的,这点要特别注意!
感谢您的耐心阅读,以上如果有错误的地方或者理解有失偏颇,请留言指正,谢谢~~
android webview 如何存储cookie
在App中嵌入网页,使用Nativie方式登录,然后将cookie保存到WebView中,实现免登录功能。同步Cookie到WebView的方法可以参考下面的代码:
/**
* Sync Cookie
*/
private void syncCookie(Context context, String url){
try{
Log.d("Nat: webView.syncCookie.url", url);
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();// 移除
cookieManager.removeAllCookie();
String oldCookie = cookieManager.getCookie(url);
if(oldCookie != null){
Log.d("Nat: webView.syncCookieOutter.oldCookie", oldCookie);
}
StringBuilder sbCookie = new StringBuilder();
sbCookie.append(String.format("JSESSIONID=%s","INPUT YOUR JSESSIONID STRING"));
sbCookie.append(String.format(";domain=%s", "INPUT YOUR DOMAIN STRING"));
sbCookie.append(String.format(";path=%s","INPUT YOUR PATH STRING"));
String cookieValue = sbCookie.toString();
cookieManager.setCookie(url, cookieValue);
CookieSyncManager.getInstance().sync();
String newCookie = cookieManager.getCookie(url);
if(newCookie != null){
Log.d("Nat: webView.syncCookie.newCookie", newCookie);
}
}catch(Exception e){
Log.e("Nat: webView.syncCookie failed", e.toString());
}
}
使用上面的方法可以将Cookie同步到WebView中,这样浏览网页时即可实现免登录。
但是在实际使用过程中会出现Cookie并未保存成功,每次都会跳转到登录页面应为初始化WebView时漏掉了重要的东西。可以参考下面代码设置WebView。
/**
* init WebView Settings
* */
private void initWebViewSettings(){
// myWebView.getSettings().setSupportZoom(true);
// myWebView.getSettings().setBuiltInZoomControls(true);
// myWebView.getSettings().setDefaultFontSize(12);
// myWebView.getSettings().setLoadWithOverviewMode(true);
// 设置可以访问文件
myWebView.getSettings().setAllowFileAccess(true);
//如果访问的页面中有Javascript,则webview必须设置支持Javascript
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setUserAgentString(MyApplication.getUserAgent());
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setAppCacheEnabled(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.getSettings().setDatabaseEnabled(true);
}
完成以上两步操作,再次运行程序,就会发现,打开网页后不会再跳转到登录页面了。
Androidwebviewcookie的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、Androidwebviewcookie的信息别忘了在本站进行查找喔。
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » 关于Androidwebviewcookie的信息
1 评论