wkwebview中的cookie:
1:wkwebview默认可以携带原生接口种下的cookie;iOS8以后,cookie都存储在NSHTTPCookieStore的单例中,会自动同步各处的cookie;
2:iOS9-iOS10,wkwebview中只能访问cookie,不能设置(也不推荐)。(两种方法:header头中种cookie,通过js插入或桥接主动存储cookie,问题比较多,比如稳定性不好,headed主动设置后js再设置无效,且需要主动处理各种cookie的持久化等)
自测发现,虽然并不能在调试中看到wkwebview中 的cookie,但是实际接口却能读取到。所以不主动插入cookie,测试中看没啥问题;
3:iOS11 之后,新增WKHTTPCookieStore,可以管理cookie(查看、清除和设置);
4:不同的webview之间同步cookie:可以使用BXProcessPool单例(因为把他们变成统一进程中,被设置成isSessionOnly的cookie就可以同步了);
5:webview中的cookie可以被自动同步到原生(isSessionOnly=yes的除外)。
6:Cookie可在不同进程之间保持同步。而Session Cookie(一个isSessionOnly方法返回YES的Cookie)只能在单一进程中使用。wkwebview是有独立进程的,所以,设置成isSessionOnly=yes的cookie不能在原生请求和wkwebview之间同步。
7:cookie中一些字段的解释:
HttpOnly:如何保障我们的Cookie安全呢?Cookie都是通过document对象获取的,我们如果能让cookie在浏览器中不可见就可以了,那HttpOnly就是在设置cookie时接受这样一个参数,一旦被设置,在浏览器的document对象中就看不到cookie了。而浏览器在浏览网页的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括Ajax的时候),应用程序也一般不会在JS里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用JS操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。
网上所谓的 UIWebView WKWebView 和 Native 之间同步 Cookie 的方法,只要看到里面有 Javascript 代码的,都存在这个问题,根本原因就在于HTML 页面是不能通过 Javascript 代码来修改 HttpOnly 属性是 true 的 Cookie .