Android中清楚Cookie和WebView的快取
前幾天在做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命名的東西
刪除儲存於手機上的快取.
- // clear the cache before time numDays
- private int clearCacheFolder(File dir, long numDays) {
- int deletedFiles = 0;
- if (dir!= null && dir.isDirectory()) {
- try {
- for (File child:dir.listFiles()) {
- if (child.isDirectory()) {
- deletedFiles += clearCacheFolder(child, numDays);
- }
- if (child.lastModified() < numDays) {
- if (child.delete()) {
- deletedFiles++;
- }
- }
- }
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
- return deletedFiles;
- }
開啟關閉使用快取
- //優先使用快取:
- WebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
- //不使用快取:
- WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
在退出應用的時候加上如下程式碼
- File file = CacheManager.getCacheFileBaseDir();
- if (file != null && file.exists() && file.isDirectory()) {
- for (File item : file.listFiles()) {
- item.delete();
- }
- file.delete();
- }
- context.deleteDatabase("webview.db");
- context.deleteDatabase("webviewCache.db");
發現這個問題,一個朋友在iteye上問的:
Android的CookieManager只提供了removeAllCookies方法,用來刪除所有的cookie,有什麼辦法只刪除和特定url關聯的cookie呢?本來打算使用setCookie(url, value)將指定url關聯的cookie設為空串,但試了一下發現這個方法只是在已有的基礎上繼續新增cookie,並不能重置已有的cookie。
有朋友給打答案:
- /**
- * 同步一下cookie
- */
- public static void synCookies(Context context, String url) {
- CookieSyncManager.createInstance(context);
- CookieManager cookieManager = CookieManager.getInstance();
- cookieManager.setAcceptCookie(true);
- cookieManager.removeSessionCookie();//移除
- cookieManager.setCookie(url, cookies);//指定要修改的cookies
- CookieSyncManager.getInstance().sync();
- }
相關文章
- Android webview的快取機制AndroidWebView快取
- webView快取WebView快取
- WebView快取原理分析和應用WebView快取
- WebView 快取原理分析和應用WebView快取
- 從WebView快取聊到Http 的快取機制WebView快取HTTP
- WebView 設定快取WebView快取
- android httpclient與webview cookie同步AndroidHTTPclientWebViewCookie
- 詳解cookie、session和HTTP快取CookieSessionHTTP快取
- Android WebView 實現離線快取閱讀AndroidWebView快取
- android中將原生請求的介面url的cookie同步到webview中。AndroidCookieWebView
- 老徐和阿珍的故事:快取穿透、快取擊穿、快取雪崩、快取熱點,傻傻分不清楚快取穿透
- Android高手進階教程(二十四)之---Android WebView的快取!!!AndroidWebView快取
- Android WebView儲存Cookie登入AndroidWebViewCookie
- 如何清除Safari,Chrome和Firefox中的快取,歷史記錄和CookieChromeFirefox快取Cookie
- WebView自定義快取路徑WebView快取
- Swift iOS : WebView快取圖片的方法SwiftiOSWebView快取
- 從WebView快取聊到Http 的快取機制 | 掘金技術徵文WebView快取HTTP
- 搞清楚CookieCookie
- 把cookie聊清楚Cookie
- 深入理解Android中的快取機制(三)磁碟快取Android快取
- 透過WebView2獲取HTTP-only cookieWebViewHTTPCookie
- Cookie && Session && localStorage && sessionstorage && HTTP快取CookieSessionHTTP快取
- 深入理解Android中的快取機制(一)快取簡介Android快取
- Android 中 EventBus 的使用(2):快取事件Android快取事件
- MyBatis中的一級快取和二級快取介紹MyBatis快取
- Appium Android 獲取WebView元素的方法APPAndroidWebView
- 10-05 WebView關於快取模式的那些事~WebView快取模式
- Android 中 WebView 的除錯方法AndroidWebView除錯
- Android中WebView的使用指南:AndroidWebView
- Android中WebView使用解析AndroidWebView
- Android WebView:這是一份 詳細 & 易懂的WebView學習攻略(含與JS互動、快取構建等)AndroidWebViewJS快取
- Android:手把手教你構建 WebView 的快取機制 & 資源預載入方案AndroidWebView快取
- Android Webview和ScrollView衝突和WebView使用總結AndroidWebView
- Android中的快取策略,實戰打造ImageLoaderAndroid快取
- Android中圖片的三層快取詳解Android快取
- Java和Android的LRU快取及實現原理JavaAndroid快取
- spring和mybatis中的連線池和快取SpringMyBatis快取
- 從cookie中取資料Cookie