WebView是基于webkit內(nèi)核的UI控件庄蹋,相當(dāng)于一個瀏覽器客戶端熙暴。它會在本地維護每次會話的cookie(保存在data/data/package_name/app_WebView/Cookies.db)
打開AndroidStudio右側(cè)邊欄的 DeviceFileExplorer
當(dāng)WebView加載URL的時候,WebView會從本地讀取該URL對應(yīng)的cookie,并攜帶該cookie與服務(wù)器進行通信遭赂。WebView通過android.webkit.CookieManager類來維護cookie缀雳。
Cookie的生成
1.當(dāng)?shù)谝淮卧L問服務(wù)器時题诵,會在響應(yīng)頭里面看到Set-Cookie信息紧显。
瀏覽器會根據(jù)響應(yīng)頭的set-cookie信息設(shè)置瀏覽器的cookie并保存之.
此時 web端也可能往cookie中存放一些信息讲衫。并在請求的時候,將cookie一并帶到服務(wù)器孵班,服務(wù)器會解析cookie中信息并進行邏輯處理(辨別是那個用戶涉兽,判斷是否登錄失效)
2.當(dāng)再次請求的時候(非首次請求),瀏覽器會在請求頭里將cookie發(fā)送給服務(wù)器篙程。
-
每次請求都會發(fā)送這個cookie枷畏,并拼接上一些標(biāo)識用戶的特殊信息。比如用來存儲用戶信息的token虱饿。
服務(wù)端會根據(jù)這個cookie中的信息拥诡,去判斷屬于那個用戶,返回相應(yīng)信息郭厌。
4)cookie的工作流程可以簡單用下面的圖表示:
1811110-c70df24f5b865058.png
Cookie的操作
CookieManager
使用CookieManager管理cookie:從sdk21之后袋倔,webview已經(jīng)內(nèi)置了cookie的同步操作了。雖然不再需要關(guān)注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操作:底層實現(xiàn)是異步清除數(shù)據(jù)庫的記錄
CookieManager.getInstance().removeAllCookies(null);
CookieManager.getInstance().flush();
3.設(shè)置cookie操作
//cookie 保存了鍵值對的字符串 “key=value”
CookieManager.getInstance().setCookie(getDomain(String url), cookie);