iOS Dev

swift3.0 Alamofire cookie 持久化

2017-01-03  本文已影响2105人  lesliefang

Alamofire 会自动处理 cookie 并在之后的请求中携带 cookie。 但当应用重启后就不会携带 cookie 了,我估计 cookie 被临时保存到了内存中,也有可能在文件中,但没有发现保存在什么地方。所以要想永久的保存 cookie 我们需要手动将 cookie 保存到文件中,并在请求中携带。

response 获取 cookie
let headerFields = response.response?.allHeaderFields as! [String: String]
let url = response.request?.url
let cookies = HTTPCookie.cookies(withResponseHeaderFields: headerFields, for: url!)
var cookieArray = [ [HTTPCookiePropertyKey : Any ] ]()
for cookie in cookies {
   cookieArray.append(cookie.properties!)
}

保存到 UserDefault
UserDefaults.standard.set(cookieArray, forKey: "hz_tokens")
读取并携带 cookie, 一般写在 AppDelegate 中就可以
if let cookieArray = UserDefaults.standard.array(forKey: "hz_tokens") {
     for cookieData in cookieArray {
         if let dict = cookieData as? [HTTPCookiePropertyKey : Any] {
             if let cookie = HTTPCookie.init(properties : dict) {
                 HTTPCookieStorage.shared.setCookie(cookie)
             }
         }
     }
 }

吐槽一下 optional 的设计虽然避免了空指针调用,但导致 if let 写的太多。

上一篇下一篇

猜你喜欢

热点阅读