我要做的是创建一个NSURLSession
,当我创建Cookie
时,它不会自动为NSMutableURLRequest
HTTP标头赋值,因为我设置了该值我自己的。但是,当我在API请求中签名时,我希望能够存储返回给我的cookie。
我使用以下代码来实例化我的会话:
func createSession() {
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
// Set cookie policies.
configuration.HTTPCookieAcceptPolicy = .Always
configuration.HTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
configuration.HTTPShouldSetCookies = false
// ...
return NSURLSession(configuration: configuration, delegate: nil, delegateQueue: nil)
}
当NSURLSessionDataTask
在completionHandler
中回复给我时,我会深入了解共享Cookie存储空间,以获取响应附带的Cookie。但是,我总是得到一个空数组。
if let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(response.URL!) {
println("cookies: \(cookies)") // Prints an empty array.
if let cookie = cookies.last as? NSHTTPCookie {
// I save the cookie to disk here.
}
}
为什么即使我将NSURLSession
设置为始终接受Cookie,甚至提供了Cookie存储空间,也会发生这种情况?
我只能通过将HTTPShouldSetCookies
设置为true
并在Cookie
中提供NSMutableURLRequest
HTTP标头来获取我想要的行为。但是,HTTPShouldSetCookies
上的Apple文档说如果我在请求级别自己提供cookie,我应该将其设置为false
:
如果您想自己提供Cookie,请将此值设置为NO,并通过会话的HTTPAdditionalHeaders属性或使用自定义NSURLRequest对象的每个请求级别提供Cookie标头。