一、背景
前段時間,有前端開發(fā)同學反饋,WKWebView的Cookie存在讀不到的問題,并給出了網(wǎng)上的一些博客資料。趁空閑時間,研究實驗下。
主要參考資料
- 這才是 WKWebview Cookie 管理的正確方式
- iOS開發(fā)WKWebView Cookie的讀取與寫入,與UIWebView的Cookie共享
- UIWebView遷移WKWebView過程中遇到的各種坑
二、分析
通過閱讀以上幾篇博客,總結下來,主要說明和解決的核心問題是:
UIWebView和WKWebView因為Cookie的存儲目錄的不同,導致相互之間的Cookie不能共享。
為了驗證該問題,特做了幾個簡單實驗,實驗機型為:iPhoneX 12.1.2系統(tǒng)。
2.1 Cookie的設置和讀取
JavaScript中,Cookie的設置通過如下方法:
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
// cookie存儲時間
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
讀取方法:
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); //正則匹配
if(arr=document.cookie.match(reg)){
return unescape(arr[2]);
}
else{
return null;
}
}
刪除方法:
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null){
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
}
2.2 WKWebView 和 UIWebView的Cookie存儲對比實驗
準備工作:
(1) 實驗的Demo頁面
(2) .binarycookies文件解析器-BinaryCookieReader
1 通過Xcode下載AppData

2 找到Cookie的存儲目錄

發(fā)現(xiàn)只有一個Cookies.binarycookies文件,而不是此文所說的兩個目錄,因此推斷,真機環(huán)境下,Cookie都存儲在同一個位置。
3 解析Cookies.binarycookies文件
通過BinaryCookieReader解析
Python BinaryCookieReader.py [Cookie.binarycookies-file-path]
可以看到如下內(nèi)容:
Cookie : BAIDUID=99F3FE1706B17E694C8C2FB8A86937BF:FG=1; domain=.baidu.com; path=/; expires=Thu, 30 Jan 2020;
4 通過WKWebView設置Cookie,UIWebView讀取Cookie
WKWebView設置Cookie: name = skate

UIWebView讀取Cookie

同時查看Cookies.binarycookies文件,發(fā)現(xiàn)增加了剛才設置的Cookie條目
Cookie : BAIDUID=99F3FE1706B17E694C8C2FB8A86937BF:FG=1; domain=.baidu.com; path=/; expires=Thu, 30 Jan 2020;
Cookie : name=skate; domain=10.117.23.129; path=/; expires=Fri, 01 Mar 2019;
5 通過UIWebView設置Cookie,WKWebView讀取Cookie
UIWebView設置Cookie: name = zhb,步驟如上,不再貼出截圖,發(fā)現(xiàn)WKWebView讀取的Cookie為name = zhb,查看Cookies.binarycookies文件
Cookie : BAIDUID=99F3FE1706B17E694C8C2FB8A86937BF:FG=1; domain=.baidu.com; path=/; expires=Thu, 30 Jan 2020;
Cookie : name=zhb; domain=10.117.23.129; path=/; expires=Fri, 01 Mar 2019;
相應的Cookie發(fā)生了變化。
2.3 實驗結論
通過上述實驗發(fā)現(xiàn),在真機iPhoneX 12.1.2系統(tǒng)環(huán)境下,WKWebView和UIWebView的Cookie存儲位置一致,彼此共享。