关于Androidwebviewcookie的信息

今天给各位分享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的信息别忘了在本站进行查找喔。

1、本网站名称:源码村资源网
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » 关于Androidwebviewcookie的信息

1 评论

您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论