• 保存到桌面  加入收藏  设为首页
安卓应用

Android中清除Cookie和WebView的缓存

时间:2016-10-18 12:45:53   作者:胜行天下   来源:胜行天下   阅读:769   评论:0

前几天在做facebook链接的时候,总是第一次成功,第二次失败,后来分析,是本地的缓存没有清空,看了facebook sdk的源码才发现,果然,要做一步清楚cookie的操作:

一、清除cookie

 public static void clearCookies(Context context) {
        // Edge case: an illegal state exception is thrown if an instance of
        // CookieSyncManager has not be created.  CookieSyncManager is normally
        // created by a WebKit view, but this might happen if you start the
        // app, restore saved state, and click logout before running a UI
        // dialog in a WebView -- in which case the app crashes
        @SuppressWarnings("unused")
        CookieSyncManager cookieSyncMngr =
            CookieSyncManager.createInstance(context);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.removeAllCookie();
    }

这是facebook sdk的源码,我不知道第一句到底起了什么作用?

 

二、清除webview缓存,查看root过的手机data下的文件,会发现有这个东西:webview命名的东西

 

删除保存于手机上的缓存.

 

[html] view plain copy
  1. // clear the cache before time numDays       
  2. private int clearCacheFolder(File dir, long numDays) {            
  3.     int deletedFiles = 0;           
  4.     if (dir!= null && dir.isDirectory()) {               
  5.         try {                  
  6.             for (File child:dir.listFiles()) {      
  7.                 if (child.isDirectory()) {                
  8.                     deletedFiles += clearCacheFolder(child, numDays);            
  9.                 }      
  10.                 if (child.lastModified() < numDays) {       
  11.                     if (child.delete()) {                     
  12.                         deletedFiles++;             
  13.                     }      
  14.                 }      
  15.             }               
  16.         } catch(Exception e) {         
  17.             e.printStackTrace();      
  18.         }       
  19.     }         
  20.     return deletedFiles;       
  21. }     


 

 

打开关闭使用缓存

[java] view plain copy
  1. //优先使用缓存:  
  2. WebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);    
  3.   
  4. //不使用缓存:  
  5. WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);   


 

 

在退出应用的时候加上如下代码

[html] view plain copy
  1. File file = CacheManager.getCacheFileBaseDir();    
  2.    if (file != null && file.exists() && file.isDirectory()) {    
  3.     for (File item : file.listFiles()) {    
  4.      item.delete();    
  5.     }    
  6.     file.delete();    
  7.    }    
  8.     
  9.   context.deleteDatabase("webview.db");    
  10.   context.deleteDatabase("webviewCache.db");   


 

 

 发现这个问题,一个朋友在iteye上问的:

Android的CookieManager只提供了removeAllCookies方法,用来删除所有的cookie,有什么办法只删除和特定url关联的cookie呢?本来打算使用setCookie(url, value)将指定url关联的cookie设为空串,但试了一下发现这个方法只是在已有的基础上继续添加cookie,并不能重置已有的cookie。

有朋友给打答案:

[html] view plain copy
  1. /**  
  2.  * 同步一下cookie  
  3.  */  
  4. public static void synCookies(Context context, String url) {  
  5.     CookieSyncManager.createInstance(context);  
  6.     CookieManager cookieManager = CookieManager.getInstance();  
  7.     cookieManager.setAcceptCookie(true);  
  8.     cookieManager.removeSessionCookie();//移除  
  9.     cookieManager.setCookie(url, cookies);//指定要修改的cookies  
  10.     CookieSyncManager.getInstance().sync();  
  11. }  

有任何疑问或技术合作都可联系我

微信:yanfahezuo 【推荐】

QQ:596957738


相关评论

加我微信 596957738 (QQ同号)加我微信     QQ联系:596957738    地址:江苏省南京市浦口区

苏ICP备2023050353号

   

苏公网安备32011402010305号

江节胜的Gitee,江节胜的Git地址