在 Alamofire 中保存 cookies (Swift)
Saving cookies in Alamofire (Swift)
我想存储我的 cookie,这样当我重新打开应用程序时,我可以恢复存储在前一个实例中的 cookie。
要初始化 alamofire,我使用:
let manager = Alamofire.Manager.sharedInstance
我加载 cookie 的代码是:
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL)
Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil)
但是当我重新启动 phone 它忘记了所有的 cookie。
1.Add 在 NSUserDefaults
中保存 cookie 的方法
func setCookie (cookie:NSHTTPCookie)
{
NSUserDefaults.standardUserDefaults().setObject(cookie.properties, forKey: "kCookie")
NSUserDefaults.standardUserDefaults().synchronize()
}
2.And 重启后检索它们的方法
func getCookie () -> NSHTTPCookie
{
let cookie = NSHTTPCookie(properties: NSUserDefaults.standardUserDefaults().objectForKey("kCookie") as! [String : AnyObject])
return cookie!
}
3.Retrieve 来自 Alamofire 请求的 cookie
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(response.response?.allHeaderFields as! [String: String], forURL: (response.response?.URL!)!)
//Save method
setCookie(cookies.first!)
4.Use getCookie
任何请求前重启后的方法
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(getCookie())
重要提示: 在 Swift 2.2
中测试
对于 Swift 3 和 Alamofire 4.4
1.Add 在 UserDefaults
中保存 cookie 的方法
func saveCookies(response: DataResponse<Any>) {
let headerFields = response.response?.allHeaderFields as! [String: String]
let url = response.response?.url
let cookies = HTTPCookie.cookies(withResponseHeaderFields: headerFields, for: url!)
var cookieArray = [[HTTPCookiePropertyKey: Any]]()
for cookie in cookies {
cookieArray.append(cookie.properties!)
}
UserDefaults.standard.set(cookieArray, forKey: "savedCookies")
UserDefaults.standard.synchronize()
}
2.Use Alamofire 中的 saveCookies()
Alamofire.request(urlString).responseJSON { response in
saveCookies(response)
}
3.Add 从 UserDefaults
加载 cookie 的方法
func loadCookies() {
guard let cookieArray = UserDefaults.standard.array(forKey: "savedCookies") as? [[HTTPCookiePropertyKey: Any]] else { return }
for cookieProperties in cookieArray {
if let cookie = HTTPCookie(properties: cookieProperties) {
HTTPCookieStorage.shared.setCookie(cookie)
}
}
}
4.Use loadCookies() 在 Alamofire.request()
之前
我想存储我的 cookie,这样当我重新打开应用程序时,我可以恢复存储在前一个实例中的 cookie。 要初始化 alamofire,我使用:
let manager = Alamofire.Manager.sharedInstance
我加载 cookie 的代码是:
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL)
Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil)
但是当我重新启动 phone 它忘记了所有的 cookie。
1.Add 在 NSUserDefaults
func setCookie (cookie:NSHTTPCookie)
{
NSUserDefaults.standardUserDefaults().setObject(cookie.properties, forKey: "kCookie")
NSUserDefaults.standardUserDefaults().synchronize()
}
2.And 重启后检索它们的方法
func getCookie () -> NSHTTPCookie
{
let cookie = NSHTTPCookie(properties: NSUserDefaults.standardUserDefaults().objectForKey("kCookie") as! [String : AnyObject])
return cookie!
}
3.Retrieve 来自 Alamofire 请求的 cookie
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(response.response?.allHeaderFields as! [String: String], forURL: (response.response?.URL!)!)
//Save method
setCookie(cookies.first!)
4.Use getCookie
任何请求前重启后的方法
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(getCookie())
重要提示: 在 Swift 2.2
中测试对于 Swift 3 和 Alamofire 4.4
1.Add 在 UserDefaults
func saveCookies(response: DataResponse<Any>) {
let headerFields = response.response?.allHeaderFields as! [String: String]
let url = response.response?.url
let cookies = HTTPCookie.cookies(withResponseHeaderFields: headerFields, for: url!)
var cookieArray = [[HTTPCookiePropertyKey: Any]]()
for cookie in cookies {
cookieArray.append(cookie.properties!)
}
UserDefaults.standard.set(cookieArray, forKey: "savedCookies")
UserDefaults.standard.synchronize()
}
2.Use Alamofire 中的 saveCookies()
Alamofire.request(urlString).responseJSON { response in
saveCookies(response)
}
3.Add 从 UserDefaults
加载 cookie 的方法func loadCookies() {
guard let cookieArray = UserDefaults.standard.array(forKey: "savedCookies") as? [[HTTPCookiePropertyKey: Any]] else { return }
for cookieProperties in cookieArray {
if let cookie = HTTPCookie(properties: cookieProperties) {
HTTPCookieStorage.shared.setCookie(cookie)
}
}
}
4.Use loadCookies() 在 Alamofire.request()