Android WebView---Cookie
2017-07-18 11:09
351 查看
WebView–Cookie
当我们加载Html时候,会在我们data/应用package下生成database与cache两个文件夹:我们请求的Url记录是保存在webviewCache.db里,而url的内容是保存在webviewCache文件夹下.
WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即AppCache)。
缓存构成:
/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db
综合可以得知 webview 会将我们浏览过的网页url已经网页文件(css、图片、js等)保存到数据库表中
WebView 缓存模式(5种)
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
如:www.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。
www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。
总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。
设置WebView缓存模式
示例
/** * 设置WebView 缓存模式 */ private void initWebView() { mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); //设置 缓存模式 // 开启 DOM storage API 功能 mWebView.getSettings().setDomStorageEnabled(true); //开启 database storage API 功能 mWebView.getSettings().setDatabaseEnabled(true); String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME; // String cacheDirPath = getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME; Log.i(TAG, "cacheDirPath=" + cacheDirPath); //设置数据库缓存路径 mWebView.getSettings().setDatabasePath(cacheDirPath); //设置 Application Caches 缓存目录 mWebView.getSettings().setAppCachePath(cacheDirPath); //开启 Application Caches 功能 mWebView.getSettings().setAppCacheEnabled(true); }
在Android应用程序中经常会加载一个WebView页,如果需要客户端向WebView传递信息,比如Cookie,也是可以的。
需要应用程序先将Cookie注入进去,打开该网页时,WebView会将加载的url通过http请求传输到服务器。同时,在这次请求中,会将Cookie信息通过http header传递过去。
流程如下: 1、客户端通过以下代码设置cookie
示例
public static void synCookies(Context context, String url) { CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setCookie(url, "uid=1243432"); CookieSyncManager.getInstance().sync(); }
2、CookieManager会将这个Cookie存入该应用程序/data/data/databases/目录下的webviewCookiesChromium.db数据库的cookies表中 3、打开网页,WebView从数据库中读取该cookie值,放到http请求的头部,传递到服务器 4、客户端可以在注销登录时清除该应用程序用到的所有cookies
示例
public void removeCookie(Context context) { CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); CookieSyncManager.getInstance().sync(); }
这里可以删除指定url的cookie值
示例
/** * 删除指定url的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加载CookieSession
- android 中对于采用okhttp时获取cookie并放入webview实现跳过登陆显示页面的功能
- Android中设置Webview支持Cookie
- Android Webview新认识(获取cookie,所加载网页内的链接的url)
- android中webview注入cookie
- 在Android WebView中设置Cookie
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- 【WebView】Android WebView中的Cookie操作
- Android WebView保存Cookie登录
- Android(安卓)WebView设置cookie
- android webview里设置cookie
- Android Webview清除缓存和Cookie
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- android webview 保存cookie
- android http与web View的cookie管理
- android WebView 与 HttpClient Cookie
- Android_WebView加载网页保存信息到Cookie
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- 在Android的WebView中给一级域名设置cookie
- Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie