Alamofire 會自動處理 cookie 并在之后的請求中攜帶 cookie浊洞。 但當(dāng)應(yīng)用重啟后就不會攜帶 cookie 了惑淳,我估計 cookie 被臨時保存到了內(nèi)存中诫龙,也有可能在文件中伤极,但沒有發(fā)現(xiàn)保存在什么地方店茶。所以要想永久的保存 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 的設(shè)計雖然避免了空指針調(diào)用轿腺,但導(dǎo)致 if let 寫的太多。