一、背景
前段时间,有前端开发同学反馈,WKWebView的Cookie存在读不到的问题,并给出了网上的一些博客资料。趁空闲时间,研究实验下。
主要参考资料
- 这才是 WKWebview Cookie 管理的正确方式
- iOS开发WKWebView Cookie的读取与写入,与UIWebView的Cookie共享
- UIWebView迁移WKWebView过程中遇到的各种坑
二、分析
通过阅读以上几篇博客,总结下来,主要说明和解决的核心问题是:
UIWebView和WKWebView因为Cookie的存储目录的不同,导致相互之间的Cookie不能共享。
为了验证该问题,特做了几个简单实验,实验机型为:iPhoneX 12.1.2系统。
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的存储目录
发现只有一个Cookies.binarycookies
文件,而不是此文所说的两个目录,因此推断,真机环境下,Cookie
都存储在同一个位置。
3 解析Cookies.binarycookies
文件
通过BinaryCookieReader
解析
Python BinaryCookieReader.py [Cookie.binarycookies-file-path]
可以看到如下内容:
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
文件,发现增加了刚才设置的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
,步骤如上,不再贴出截图,发现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
发生了变化。
2.3 实验结论
通过上述实验发现,在真机iPhoneX 12.1.2系统环境下,WKWebView
和UIWebView
的Cookie
存储位置一致,彼此共享。