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版本的后两条

猜你喜欢

转载自zlping.iteye.com/blog/1633213
今日推荐