美文网首页
Cookie 和 CookieManager

Cookie 和 CookieManager

作者: wind_sky | 来源:发表于2019-07-29 11:43 被阅读0次

    Cookie

    什么是cookie:最简单理解就是由http衍生出来的一种特殊的浏览器的缓存,特点是具有时效性、账户相关性、存储在客户端等。

    作用:作为客户端的用户认证的通行证,比如服务端可以通过cookie来区分到底是哪个用户。

    Android 中Cookie的管理相关:说到cookie的管理,其实本质上就是数据的存储问题。在早期的cookie是由CookieSyncManager进行管理的,但是在API 21 之后CookieSyncManager被抛弃了,换成了CookieManager来进行管理。

    Android中Cookie的存储:项目中使用 WebView 其实会自动将 Cookie 保存在本地数据库中。保存是路径为 data/data/package_name/app_WebView/Cookies 虽然不是 .db 结尾的,实际就是一个 .db 文件

    CookieSyncManager

    使用CookieSyncManager同步cookie数据:在早期手机硬件性能比较尴尬的时候,为了提升浏览器的性能,加快cookie的读写,浏览器的cookie是存储在手机的内存上的。但是,当当存储在内存上是不够的,还需要保存到存储器上,这时CookieSyncManager应运而生。借助于CookieSyncManager在内存和存储器之间同步浏览器的cookie。另外CookieSyncManager同步策略是在一个独立的线程里定时进行同步。

    cookie开始同步:注意每次同步的时间间隔是5分钟

    //推荐在Activity.onResume()里调用 
    CookieSyncManager.createInstance(context); 
    CookieSyncManager.getInstance().startSync();
    

    cookie停止同步:

    // Activity.onPause()里调用 
    CookieSyncManager.getInstance().stopSync()
    

    cookie立即同步:调用了该方法会立即进行cookie的同步,代码如下:

    // 一般是在webview中的onPageFinished(WebView, String)方法进行强制同步 
    CookieSyncManager.getInstance().sync()
    

    删除cookie操作:

    //通常删除cookie的是这样写的 
    CookieSyncManager.createInstance(this); 
    CookieManager.getInstance().removeAllCookie(); 
    CookieManager.getInstance().removeSessionCookie(); 
    CookieSyncManager.getInstance().sync(); 
    CookieSyncManager.getInstance().startSync();
    

    CookieManager

    使用CookieManager管理cookie:从API 21之后,WebView 已经内置了cookie的同步操作了。

    手动设置cookie:

    HttpCookie cookie = new HttpCookie(name, value);
    cookie.setDomain("");               // 设置域名
    cookie.setPath("/");                // 设置path
    cookie.setMaxAge(233);          // 设置过期时间
    
    // 调用CookieManager 的方法设置cookie
    // 具有相同的 host 和 path 和 name 的任何现有的 Cookie 将会被替换为新的 Cookie
    CookieManager.getInstance().setCookie(url, cookie.toString());      
    

    注:只有cookie的domain和path与请求的URL匹配才会发送这个cookie。

    Android 5.0以上的手机使用原生WebView浏览网页,在进行登录的时候会提示验证码错误,通过查找5.0以上系统的api文档,发现5.0以上版本的webview做了较大的改动,如:同步cookie的操作已经可以自动进行,但前提是我们必须开启第三方cookie的支持,

    if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            CookieManager.getInstance().setAcceptThirdPartyCookies(webView,true);
    }
    

    删除cookie操作:底层实现是异步清除数据库的记录

    //非常简洁 
    CookieManager.getInstance().removeAllCookies(null); 
    CookieManager.getInstance().flush();
    

    立即同步:注意到这个flush()方法就是立即同步cookie的操作,与CookieSyncManager中的sync()方法是一样的

    相关文章

      网友评论

          本文标题:Cookie 和 CookieManager

          本文链接:https://www.haomeiwen.com/subject/hiavrctx.html