今天下午提了个需求:用户退出当前网页时,只清除该网页访问的域名相关的cookie,保留其他域名的饼干。
查了一下CookieManager的API,发现只有removeAllCookie(),没有清除单独域名饼干的API……想想也是,用了这么多年的浏览器,啥时候见过这功能吗?
既然系统没有提供接口,那就是只能自己想办法去清了。
首先要搞清楚饼干存在哪里吧?
在/数据/数据/& lt; package>/app_webview目录下,找到一个cookie文件,虽然它没有.db扩展名,但是其实它就是一个sqlite数据库!进去看一下,数据都存在里面表的饼干里:
sqlite>.tables 饼干元 sqlite>.dump饼干 编译指示foreign_keys=; 开始事务; 创建表饼干(creation_utc整数NOT NULL独特的主键,host_key文本NOT NULL,名字文本不是NULL, NOT NULL值文本,路径文本NOT NULL, expires_utc整数NOT NULL,安全整数NOT NULL, httponly整数NOT NULL, last_access_utc整数NOT NULL, has_expires整数NOT NULL默认1,持续的整数NOT NULL默认1,优先级整数NOT NULL默认1,encrypted_value BLOB默认”,firstpartyonly整数NOT NULL默认0); 插入“cookie”值(13122904895970126,“.hm.baidu.com”,‘HMACCOUNT’,‘1 e0666871dc4bb45’,‘/? 13792186776970126, 0, 0, 13122906283432123, 1, 1, 1, X ", 0); 插入“cookie”值(13122905170226445,“.facebook.com”,“reg_fb_ref”,“https % 3 a % 2 f % 2 fm.facebook.com % 2 f % 3 frefsrc % 3 dhttps % % 252 f % 253 252 fwww.facebook.com % 252 f ', '/', 0, 0, 1, 13122905170226445, 0, 0, 1, X ", 0); 插入“cookie”值(13122905170227182,“.facebook.com”,“reg_fb_gate”,“https % 3 a % 2 f % 2 fm.facebook.com % 2 f % 3 frefsrc % 3 dhttps % % 252 f % 253 252 fwww.facebook.com % 252 f ', '/', 0, 0, 1, 13122905170227182, 0, 0, 1, X ", 0); 插入“cookie”值(13122905170227393,“.facebook.com”,“m_ts”,“1478103992”,“/? 0, 0, 0, 13122905170227393, 0, 0, 1, X ", 0); 插入“cookie”值(13122905172258460,“.facebook.com”,‘datr’,‘uxMaWFe4eAqp6W2_dDu2MpA1’,‘/? 13185977172258460, 0, 1, 13122905172258460, 1, 1, 1, X ", 0); 插入“cookie”值(13122905172508865,“.facebook.com”、“fr”、“0 ehmpmxi6717eje6y . . BYGhO4.Dd.AAA.0.0.BYGhO7.AWUFjMmY”,“/? 13130681172508865, 0, 1, 13122905172508865, 1, 1, 1, X ", 0); 创建索引域> 私有静态孔隙deleteCookiesForDomain(上下文语境,字符串域){ CookieManager CookieManager=CookieManager.getInstance (); 如果(cookieManager==null)返回;/* http://code.google.com/p/android/issues/detail& # 63; id=19294 */如果(Build.VERSION。SDK_INT & lt;11){/*修剪领先”。的*/如果(domain.startsWith(“。”))域=domain.substring (1); } 字符串cookieGlob=cookieManager.getCookie(域); 如果(cookieGlob !=null) { String[]饼干=cookieGlob.split (“;”); (字符串cookieTuple:饼干){ String [] cookieParts=cookieTuple.split ("="); HashSetdomainSet=getDomainSet(域); (字符串dm: domainSet) {/*设置过期时间,以便该字段将被删除后调用sync () */cookieManager。setCookie (dm cookieParts [0] +”=;“格林尼治时间到期=结婚,2015年12月31日23:59:59); } } cookieManager.sync (); } } 私有静态HashSet getDomainSet (String域){ HashSet ,domainSet=new HashSet<的在(); 字符串主机=Uri.parse(域).getHost (); domainSet.add(主机); domainSet.add (“。”+主机);//排除域“baidu.com” 如果(host.indexOf (“。”) !=host.lastIndexOf (“。”)) { domainSet.add (host.substring (host.indexOf (' . '))); } 返回domainSet; }
以上这篇Android实现清除单个域名的饼干就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。