webview管理cookies在各版本中的区别

webview把cookies都保存在本地的数据库中,用CookieSyncManager类进行管理。设置cookies的方法是:CookieManager.setCookie(String url, String value)
执行下面代码:

 

CookieSyncManager.createInstance(context); 
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie("zlping.com", "userid=\"userid=33333333333\"");
cookieManager.setCookie("zlping.com", "ppu=1336455178105");
cookieManager.setCookie(".zlping.com", "userid=\"userid=33333333333\"");
cookieManager.setCookie(".zlping.com", "ppu=1336455178105");
CookieSyncManager.getInstance().sync();

 
在android2.3版本以下,数据保存在webview.db--cookies表中,表结构如下:

 

setCookie方法中URL参数必须是地址,如“zlping.com”,而不能是“.zlping.com”。否则就会如最后两条domain字段为空。android会自动把“zlping.com”做为域保存在domain中。当webview访问该域下面的网页是就会把前两条cookie带上。


而在3.0以后版本中,数据保存在webviewCookiesChromium.db--cookies表中,表结构如下



可以看出新表中没了domain字段,多出了host_key字段,如果按同样的方法保存cookies,webview访问“zlping.com”域下面的网页时只会把后面两条cookie带上,而不会带前两条cookie。


大家可能看出来了,android3.0以后把url直接保存在了host_key字段中,并当做域来用了。这就和以前的版本有冲突了。经本人实验,可以用以下方法解决:

 

 

cookieManager.setCookie("zlping.com", "userid=\"userid=33333333333\"; domain=zlping.com");
cookieManager.setCookie("zlping.com", "ppu=1336455178105; domain=zlping.com");

 

在value值中加入 domain=zlping.com,来手工设置cookies的域,这样就解决了版本冲突的问。保存在数据库中就是2.3以下版本的前两条,3.0版本的后两条

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值