我需要一个将cookies存储在单独的cookiestorage
中的urlsession在卵泡代码中,urlsession中的cookiestorage与股票cookiestorage相同,是否可以创建一个单独的cookie商店
let config = URLSessionConfiguration.default
session = URLSession(configuration: config)
config.httpCookieAcceptPolicy = .always
session.configuration.httpCookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: "adfadf")
let task = session.dataTask(with: URL(string: "https://www.google.com")!) { (data, response, error) in
print((response as? HTTPURLResponse)?.allHeaderFields ?? "")
DispatchQueue.main.async {
print(self.session.configuration.httpCookieStorage?.cookies ?? "wtf")
print(HTTPCookieStorage.shared === self.session.configuration.httpCookieStorage)
}
}
task.resume()
如果我使用HTTPCookieStorage()
编辑
我尝试手动创建一个cookie商店,然后在请求完成后向其添加cookie
let cookies = HTTPCookie.cookies(withResponseHeaderFields: headers, for: url)
// cookies is not empty
self.cookieStore.setCookies(cookies, for: url, mainDocumentURL: nil)
print(self.cookieStore.cookies) //result is nil
最后,我最终以nil为cookie
如果打开NSHTTPCookieStorage
的标头文件,您会看到此文档(由于某些原因,这些详细信息不会出现在常规文档中(。
/*!
@method sharedCookieStorageForGroupContainerIdentifier:
@abstract Get the cookie storage for the container associated with the specified application group identifier
@param identifier The application group identifier
@result A cookie storage with a persistent store in the application group container
@discussion By default, applications and associated app extensions have different data containers, which means
that the sharedHTTPCookieStorage singleton will refer to different persistent cookie stores in an application and
any app extensions that it contains. This method allows clients to create a persistent cookie storage that can be
shared among all applications and extensions with access to the same application group. Subsequent calls to this
method with the same identifier will return the same cookie storage instance.
*/
@available(iOS 9.0, *)
open class func sharedCookieStorage(forGroupContainerIdentifier identifier: String) -> HTTPCookieStorage
为了拥有一个有效的应用程序组,您需要按照说明将应用程序添加到应用程序组中。
我猜想,由于您没有将应用程序组添加到您的权利中,因此默认为NSHTTPCookieStorage.shared
。
显然HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: "groupName")
似乎仅在iOS 10 上有效,在iOS 9上,即使文档说@available(iOS 9.0, *)
open class func sharedCookieStorage(forGroupContainerIdentifier identifier: String) -> HTTPCookieStorage
您可以使用此解决方法:
let cookies: HTTPCookieStorage
if #available(iOS 10.0, *) {
cookies = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: "groupName")
} else {
cookies = HTTPCookieStorage.shared
}