Android实现清除单个域名的饼干

  

今天下午提了个需求:用户退出当前网页时,只清除该网页访问的域名相关的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 ();   }   }      私有静态HashSetgetDomainSet (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实现清除单个域名的饼干就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

Android实现清除单个域名的饼干