将NSURLSessionConfiguration的HTTPShouldSetCookies设置为false会禁用cookie存储

时间:2015-05-01 12:19:11

标签: ios cocoa swift cocoa-touch foundation

我要做的是创建一个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)
}

NSURLSessionDataTaskcompletionHandler中回复给我时,我会深入了解共享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标头。

0 个答案:

没有答案