WebView是基于webkit内核的UI控件,相当于一个浏览器客户端。它会在本地维护每次会话的cookie(保存在data/data/package_name/app_WebView/Cookies.db)
打开AndroidStudio右侧边栏的 DeviceFileExplorer
当WebView加载URL的时候,WebView会从本地读取该URL对应的cookie,并携带该cookie与服务器进行通信。WebView通过android.webkit.CookieManager类来维护cookie。
Cookie的生成
1.当第一次访问服务器时,会在响应头里面看到Set-Cookie信息。
浏览器会根据响应头的set-cookie信息设置浏览器的cookie并保存之.
此时 web端也可能往cookie中存放一些信息。并在请求的时候,将cookie一并带到服务器,服务器会解析cookie中信息并进行逻辑处理(辨别是那个用户,判断是否登录失效)
2.当再次请求的时候(非首次请求),浏览器会在请求头里将cookie发送给服务器。
-
每次请求都会发送这个cookie,并拼接上一些标识用户的特殊信息。比如用来存储用户信息的token。
服务端会根据这个cookie中的信息,去判断属于那个用户,返回相应信息。
4)cookie的工作流程可以简单用下面的图表示:
Cookie的操作
CookieManager
使用CookieManager管理cookie:从sdk21之后,webview已经内置了cookie的同步操作了。虽然不再需要关注cookie的同步,但是依然需要掌握删除cookie的操作。
/**
* 获取URL的域名
*/
private String getDomain(String url){
url = url.replace("http://", "").replace("https://", "");
if (url.contains("/")) {
url = url.substring(0, url.indexOf('/'));
}
return url;
}
1.获取cookie
CookieManager.getInstance().getCookie(getDomain(String url));
2.删除cookie操作:底层实现是异步清除数据库的记录
CookieManager.getInstance().removeAllCookies(null);
CookieManager.getInstance().flush();
3.设置cookie操作
//cookie 保存了键值对的字符串 “key=value”
CookieManager.getInstance().setCookie(getDomain(String url), cookie);