有时在app里面加载webview,需要带上用户身份信息的时候,我们可以通过CookieSyncManager来设置cookie来保持登录状态,避免重复登录,这个实现需要服务器端的配合。
CookieSyncManager:The CookieSyncManager is used to synchronize the browser cookie store between RAM and permanent storage. To get the best performance, browser cookies are saved in RAM. A separate thread saves the cookies between, driven by a timer.
中文意思是:CookieSyncManager用于同步内存和持久化存储(如数据库)之间的浏览器Cookie存储。 为了获得最佳性能,浏览器cookie被保存在内存中,并且通过一个单独的线程来同步cookies。
服务端:
Set-Cookie由服务器发送,它包含在响应请求的头部中。它用于在客户端创建一个Cookie。如下图,我们可以看到一个response的headers包括哪些信息,其中我们在app里面保存Set-Cookie的值,只保存SESSION=ba1a1905-fea7-403d-9c3c-adbeb5e2f002即可。
Android端:
1.在Android端代码里面设置cookie
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
//注意:设置Cookie 的值, 每一对 key-value 需要分开设置,即调用多次cookieManager.setCookie(url,value)
cookieManager.setCookie(url, "SESSION=ba1a1905-fea7-403d-9c3c-adbeb5e2f002");
CookieSyncManager.getInstance().sync();
2.退出登录的时候清除cookie
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
CookieSyncManager.getInstance().sync();