前言
在之前一篇文章《使用Swift读取Cookie内容》中,讲诉了如何获取Cookie内容,那如何手动创建一个Cookie呢?
创建NSHTTPCookie
在IOS中,每个Cookie数据都一个NSHTTPCookie对象,那我们就要手动创建一个NSHTTPCookie对象。
let cookie = NSHTTPCookie(properties: [ NSHTTPCookieName:"username", NSHTTPCookieValue:"devonios.com", NSHTTPCookiePath:"/", NSHTTPCookieDomain:"http://devonios.com"])
NSHTTPCookie类有一个构造函数,参数是一个字典类型,只需要提供几个必须的键即可。在DASH中,原话是这么说的:
To successfully create a cookie, you must provide values for (at least) the NSHTTPCookiePath, NSHTTPCookieName, and NSHTTPCookieValue keys, and either the NSHTTPCookieOriginURL key or the NSHTTPCookieDomain key.
很明显,前三个是必须的,后两个选一个。NSHTTPCookie提供了预置的常量字符串,我们在字典的键中可以直接写。
let NSHTTPCookieComment: String let NSHTTPCookieCommentURL: String let NSHTTPCookieDiscard: String let NSHTTPCookieDomain: String let NSHTTPCookieExpires: String let NSHTTPCookieMaximumAge: String let NSHTTPCookieName: String let NSHTTPCookieOriginURL: String let NSHTTPCookiePath: String let NSHTTPCookiePort: String let NSHTTPCookieSecure: String let NSHTTPCookieValue: String let NSHTTPCookieVersion: String
需要注意的是,如果字典的格式写错了,那么得到的对象将会是nil。字典的键必须都是上面常量中的。
有了NSHTTPCookie对象,我们就可以把它交给NSHTTPCookieStorage对象了,它是IOS中专门用来管理Cookie的。
let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage() storage.setCookie(cookie!)
通过SetCookie方法,就可以把Cookie保存起来。
当程序在发送请求时,如果URl正是创建NSHTTPCookie时指定的NSHTTPCookieDomain值时,就会自动发送这个cookie了。
可以写个简单循环来读取下保存的Cookie内容:
//读 //println(storage.cookies?.count) let cookieArray = storage.cookies! for cookie in cookieArray { print("name:\(cookie.name),value:\(cookie.value)") }