最新消息:iOS编程开发交流群(6906921) ,Mac.Cocoa开发交流群(7758675) 欢迎iOS/macOS开发编程爱好及学习者加入!

iOS HTTP网络请求Cookie的读取与写入(NSHTTPCookieStorage)

iOS 天狐 296952浏览 5评论

当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的Cookie,如果 Cookie 存在的话,会把这些信息放在 NSHTTPCookieStorage 容器中共享,当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的Cookie继续去请求。
同样适用于ASIHTTPRequest,AFNetworking, Webview等,Cookie常用于一些基于认证的网络请求

认识下NSHTTPCookieStorage
NSHTTPCookieStorage 实现了一个管理cookie的单例对象(只有一个实例),每个Cookie都是NSHTTPCookie类的实例,作为为一个规则,Cookie在(macOS)所有应用之间共享并在不同进程之间保持同步,在iOS中不会多应用共享。Session Cookie(一个isSessionOnly方法返回YES的Cookie)只能在单一进程中使用。

Cookie
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器或者客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站地址时就发送该Cookie给服务器

HTTP header
HTTP header中包含HTTP请求与响应的操作参数. header属性定义了所传输数据的各种特性. header属性以属性名开始,以冒号结尾,最后是属性值.属性名及值会因应用的不同

一.iOS htttp网络请求Cookie的读取与写入:

Cookie必然会通过HTTP的Respone传过来,并且Cookie在Respone中的HTTP header中。不管是什么请求框架,必然会存在Respone对象,比如AFNetworking2.x的operation.response,AFNetworking3.x的task.response等等。。。。

1.原生NSURLConnection写法

2.AFNetworking 写法

二.清空Cookie

三.手动设置Cookie 手动设置的Cookie不会自动持久化到沙盒

request还可以这样设置个Cookie

四.Cookie的本地缓存策略

五.Cookie的持久化存储

1.服务器端设置Cookie,以PHP为例

语法

参数 描述
name 必需。规定 cookie 的名称。
value 必需。规定 cookie 的值。
expire 可选。规定 cookie 的有效期。
path 可选。规定 cookie 的服务器路径。
domain 可选。规定 cookie 的域名。
secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。

如果服务器设置了Cookie失效时间expiresDate ,sessionOnly:FALSE会被持久化到文件中,kill掉后系统自动保存,下次启动app会自动加载.binarycookies中的Cookies,以下是一条Cookie输出

持久化到了文件中,地址是 沙盒的 /Library/Cookies/org.skyfox.iOS-Cookie.binarycookies

1cef83eb-e1c4-479b-9bc6-a14ea191e905

使用终端执行 BinaryCookieReader.py脚本 解析 org.skyfox.iOS-Cookie.binarycookies 结果如下:

2.app端手动存储Cookie

如果没设置Cookie失效时间expiresDate:(null),sessionOnly:true,kill掉后系统不会自动保存Cookie,如果想持久化Cookie 模仿浏览器存住Cookie,使用NSUserDefaults存下即可,以下是一条Cookie输出

手动保存

※iOS12以后WKWebView的Cookie已经完全使用WKHTTPCookieStore管理,WKHTTPCookieStore与NSHTTPCookieStorage有着相同的职能

iOS12以后必须使用WKHTTPCookieStore获取allHeaderFields中已经读取不到cookie了

Demo地址:https://github.com/shaojiankui/iOS-Cookie

相关链接:

iOS开发WKWebView Cookie的读取与写入,与UIWebView的Cookie共享 - 天狐博客

NSHTTPCookieStorage

转载请注明:天狐博客 » iOS HTTP网络请求Cookie的读取与写入(NSHTTPCookieStorage)

微信 OR 支付宝 扫描二维码
为天狐 打赏
非常感谢你的支持,哥会继续努力!
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (5)

  1. 请教两个问题,比如setName setValue它的作用是什么,还有一个是设置失效时间的时间单位是什么
    滴滴打船9年前 (2016-07-22)回复
    • 天狐9年前 (2016-07-22)回复
  2. 请问博主有demo可以分享么
    fanye8年前 (2016-08-11)回复
  3. 博主请教个问题,手动设置cookie,即使是设置了过期时间及sessionOnly:FALSE,然后存储到NSHTTPCookieStorage 。然后我从CookieStorage遍历之前设置的cookie的过期时间为null, sessionOnly:TRUE ,这是为什么?也就是手动设置到NSHTTPCookieStorage的cookie没有办法持久化?
    henry8年前 (2017-06-16)回复
    • 分析下binarycookies
      天狐8年前 (2017-06-17)回复