ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)

来源:互联网 发布:python格式化输出数字 编辑:程序博客网 时间:2024/06/11 15:27

转自:https://www.skyfox.org/ios-url-request-cookie.html

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

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

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

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

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

1.原生NSURLConnection写法

2.AFNetworking 写法

二.清空cookie

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

request还可以这样设置个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.AFNetworking-demo.binarycookies

ios app cookie存储目录

使用BinaryCookieReader.py脚本 解析org.skyfox.AFNetworking-demo.binarycookies 结果如下

64146D7E-45E9-475D-9D5B-3DF6D9DB58E1

2.app端手动存储Cookie

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

手动保存

 



0 0