美文网首页
UIWebView和WKWebView的cookie研究(一)

UIWebView和WKWebView的cookie研究(一)

作者: 滑翔Skate | 来源:发表于2019-01-30 15:56 被阅读0次

一、背景

前段时间,有前端开发同学反馈,WKWebView的Cookie存在读不到的问题,并给出了网上的一些博客资料。趁空闲时间,研究实验下。

主要参考资料

  1. 这才是 WKWebview Cookie 管理的正确方式
  2. iOS开发WKWebView Cookie的读取与写入,与UIWebView的Cookie共享
  3. 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

下载AppData数据.png

2 找到Cookie的存储目录

Cookie存储目录.png

发现只有一个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设置CookieUIWebView读取Cookie
WKWebView设置Cookie: name = skate

WKWebView存储和读取Cookie.png

UIWebView读取Cookie

UIWebView读取Cookie.png

同时查看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设置CookieWKWebView读取Cookie
UIWebView设置Cookie: name = zhb,步骤如上,不再贴出截图,发现WKWebView读取的Cookiename = 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系统环境下,WKWebViewUIWebViewCookie存储位置一致,彼此共享。

相关文章

网友评论

      本文标题:UIWebView和WKWebView的cookie研究(一)

      本文链接:https://www.haomeiwen.com/subject/hldcsqtx.html