前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS WKWebView设置cookie方法总结

iOS WKWebView设置cookie方法总结

作者头像
且行且珍惜_iOS
发布2021-09-07 16:48:12
5.1K0
发布2021-09-07 16:48:12
举报

先说明下我的观点,能不用Cookie尽量不用,WebViewJavascriptBridge真滴好用!

提问:NSHTTPCookieStorage还能用么?

这个问题首先你要明白,WKWebView有自己的进程,使用自己的存储空间来存储cookie和cache,WKWebView会忽视NSURLCache、NSHTTPCookieStorage、NSCredentialStorage这些默认的网络存储, 其他的网络类如NSURLConnection是无法访问到的。 同时WKWebView发起的资源请求也是不经过NSURLProtocol的,导致无法自定义请求。

让WKWebview支持NSURLProtocol可参考:NSURLProtocol对WKWebView的处理

所以这里应该很清楚,NSHTTPCookieStorage已经用不到了,但是你可以把他作为存储cookie到本地的工具使用。我自己的项目里面已经全部删除了它的使用

第一种:通过NSMutableURLRequest设置cookie(js开发的不推荐)

以我项目为例,这种方法设置的cookie,不能被js读取到,在浏览器调试中也不能看到。所以通过js开发的此方式不可用,但是可以被PHP等动态语言读取,由于我的项目都是用js开发的,故不用此方式,也不做兼容。这里就不做过多的使用介绍。

第二种:在WKWebview初始化的时候,通过js注入

这种方式不好的地方就是,只能在初始化的时候注入,如果cookie的值发生变化,就需要重新初始化,就变得比较low。所以这种方式的cookie尽量保证他的值是不变的,比如设备号、设备类型、来源等信息。使用方法如下图:

第三种:通过WKHTTPCookieStore注入cookie,但是只针对iOS11之后

使用起来就比较方便了。如图:

cookie丢失问题,网上资料很多,不做详细说明,附图一张即可:

最后可能还会遇到问题,前端获取不到,但是我的cookie确实设置成功了,在safari调试器中可以明确的看到cookie确实设置成功了。我猜想可能是由于cookie设置成功的时机在前端使用cookie值的时机之后造成,也无法解决。

前几天看到一篇文章:苹果拒绝了16个Web API

说了一堆,总结一下就是苹果觉得cookie不安全。所以cookie中尽量设置一些无关紧要的参数,或者就尽量不去使用。

毕竟cookie这个坑,踩起来难受!!!

个人不推荐使用Cookie!

最后,推荐几种靠谱的传值方式:

这都是避免出现Android和iOS出现两种不同的传值方式,测试效果上看性能无优劣,只是一种传值方式而已!!!,且看使用起来是否顺手。

一、可以拼接在地址后面,有加密需要的加密

二、通过JSBridge传值,我自己使用的WebViewJavascriptBridge,这种方式需要在页面加载完成之后才会起效。

三、将要传的值添加到NSMutableURLRequest的header内,如图:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-7-29 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先说明下我的观点,能不用Cookie尽量不用,WebViewJavascriptBridge真滴好用!
  • 提问:NSHTTPCookieStorage还能用么?
    • 第一种:通过NSMutableURLRequest设置cookie(js开发的不推荐)
      • 第二种:在WKWebview初始化的时候,通过js注入
        • 第三种:通过WKHTTPCookieStore注入cookie,但是只针对iOS11之后
          • cookie丢失问题,网上资料很多,不做详细说明,附图一张即可:
          • 最后,推荐几种靠谱的传值方式:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档