iOS 开发 UIWebView 设置 Cookie

关于 webView 的 cookie 设置


在这里插入图片描述

前言

最近的项目中,前端需要和我们交互,而且我们登录后的信息要传给前端,做 token 验证,所以就跟前端同学商议我们把相关的信息放到 cookie 里。当然网上有好多参考的文章,喜欢的同学,可以自己去搜索看看。

正文

什么是 Cookie

Cookie 是网站为了识别终端身份,保存在终端本地的用户凭证信息。Cookie 中的字段与意义由服务端进行定义。例如,当用户在某个网站进行了登录操作后,服务端会将Cookie 信息返回给终端,终端会将这些信息进行保存,在下一次再次访问这个网站时,终端会将保存的 Cookie 信息一并发送到服务端,服务端根据 Cookie 信息是否有效来判断此用户是否可以自动登录。来自这里

设置 Cookie

关于管理 Cookie 有两个类,具体请看上面链接里的文章。本文只介绍其中一种:

//MARK: 设置 cookie
    func setCookie() {
        // 以上所有字段都是必传字段, 签名另外处理
        let keys = ["app-id", "app-version", "platform", "device-name", "os-version"]
        let values = [AppKey.ServerAppID, AppVersion, AppKey.AppPlatform, UIDeviceHardware.platformString(), GlobalAction.deviceVersion]
        
        for (i, str) in keys.enumerated() {
            var cookies = [HTTPCookiePropertyKey : Any]()
            cookies[HTTPCookiePropertyKey.name] = str
            cookies[HTTPCookiePropertyKey.value] = values[i]
            cookies[HTTPCookiePropertyKey.domain] = url.host ?? ""
            cookies[HTTPCookiePropertyKey.path] = "/"
            cookies[HTTPCookiePropertyKey.version] = "0"
            cookies[HTTPCookiePropertyKey.expires] = Date(timeIntervalSinceNow: 2629743)
            let cookie = HTTPCookie(properties: cookies)
            HTTPCookieStorage.shared.setCookie(cookie!)
        }
    }
    
    //MARK: 删除 cookie
    func deleteCookie() {
        let cookieStorage = HTTPCookieStorage.shared
        let cookies = cookieStorage.cookies(for: url) ?? []
        for cookie in cookies {
            cookieStorage.deleteCookie(cookie)
        }
    }

注意:
1、keys 里存放的是你需要传给前端的所有的参数的 key
2、values 里存放的是对应的 key 的值
3、有几个 key 就需要创建几个 cookie 对象,然后用HTTPCookieStorage存储起来。(刚开始设置时,只创建了一个 cookie 对象,结果抓包看见 cookie 里只有最后一个 key-value)
4、domain 一定是要设置的,为了防止出错,直接用 webview 加载的 url 来获取域名:url.host;至于 Objecttive-C 如何操作,请自行搜索
5、path 和 version 如果没有特别需求,就按照上面的设置就行了。

// 使用如下:
func loadWebPage() {
        setCookie()
        let request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 60)
        webView.loadRequest(request)
        
    }

其实整体的使用还是很简单的,可能对于很少设置 Cookie 的人来说,就有可能踩上面所说的坑,所以就开篇文章,把一些问题记录下来,让自己以后有迹可循。

总结

对于 Cookie 的使用其实很简单,只要你愿意去搜索,去尝试。我相信,没有解决不了的问题,只有你愿不愿意尝试。好了,不啰嗦了,我要继续去搬砖了,不然今个的晚饭又没着落了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值