android WebView寫入清除cookie機(jī)制

WebView是基于webkit內(nèi)核的UI控件,相當(dāng)于一個(gè)瀏覽器客戶端。它會(huì)在本地維護(hù)每次會(huì)話的cookie(保存在data/data/package_name/app_WebView/Cookies.db)
打開AndroidStudio右側(cè)邊欄的 DeviceFileExplorer


查看APP cookie

當(dāng)WebView加載URL的時(shí)候,WebView會(huì)從本地讀取該URL對(duì)應(yīng)的cookie,并攜帶該cookie與服務(wù)器進(jìn)行通信。WebView通過android.webkit.CookieManager類來維護(hù)cookie。

Cookie的生成

1.當(dāng)?shù)谝淮卧L問服務(wù)器時(shí),會(huì)在響應(yīng)頭里面看到Set-Cookie信息。


Set-Cookie

瀏覽器會(huì)根據(jù)響應(yīng)頭的set-cookie信息設(shè)置瀏覽器的cookie并保存之.
此時(shí) web端也可能往cookie中存放一些信息。并在請(qǐng)求的時(shí)候,將cookie一并帶到服務(wù)器,服務(wù)器會(huì)解析cookie中信息并進(jìn)行邏輯處理(辨別是那個(gè)用戶,判斷是否登錄失效)
2.當(dāng)再次請(qǐng)求的時(shí)候(非首次請(qǐng)求),瀏覽器會(huì)在請(qǐng)求頭里將cookie發(fā)送給服務(wù)器。


cookie
  1. 每次請(qǐng)求都會(huì)發(fā)送這個(gè)cookie,并拼接上一些標(biāo)識(shí)用戶的特殊信息。比如用來存儲(chǔ)用戶信息的token。
    服務(wù)端會(huì)根據(jù)這個(gè)cookie中的信息,去判斷屬于那個(gè)用戶,返回相應(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操作:底層實(shí)現(xiàn)是異步清除數(shù)據(jù)庫的記錄

CookieManager.getInstance().removeAllCookies(null); 
CookieManager.getInstance().flush();

3.設(shè)置cookie操作

//cookie  保存了鍵值對(duì)的字符串 “key=value”
CookieManager.getInstance().setCookie(getDomain(String url), cookie);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容