Cookie同步与管理

在客户端混合开发过程中,通常需要H5与Native业务之间实现用户基础数据信息的共享。

例如,用户成功登录了App,并在App内访问某个需要用户信息的Web页面。那么,如何将用户成功登录的状态以及相关用户信息数据告诉Web页面呢?

我们利用Webview的Cookie管理维护机制,结合客户端基本数据的本地数据缓存和管理,可以满足在同一App内,Web页面与Naitve页面之间的数据信息的共享和同步需求。

Cookie

HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。了解更多

CookieManager

Android系统中,Webview 将Cookie数据信息存放于本地数据库文件中:

/data/data/package_name/app_WebView/Cookies.db

对于Cookies的CRUD操作则交给CookieManager来完成,(Android 5.0 之前通过CookieSyncManager管理), 它为Cookie的读写提供了简单的getset方法。

为了保证Webview的性能,Webview的Cookie分别缓存于内存和磁盘上。因此需要我们注意的是,在Android 5.0之前进行Cookie写操作时需要显式的通过调用CookieSyncManager的同步方法来负责维护两种缓存之间的数据同步:

CookieSyncManager.createInstance(context).startSync();

// Cookie 写操作

CookieSyncManager.createInstance(context).stopSync();

CookieSyncManager则会在异步线程里定时完成Cookie的同步任务。 如果需要立即将内存中的Cookie刷新到磁盘中,则需要调用sync()方法来强制完成同步操作。

而在Android 5.0后,CookieSyncManager被废弃掉,新的Cookie管理类 CookieManager将Cookie同步操作内置在写操作的Api中,无需显式调用。 需要强制同步,则调用flush()方法即可。