在Alamofire(斯威夫特)保存饼干

Zac*_*Zac 9 cookies ios swift alamofire xcode7

我想存储我的cookie,以便当我重新打开应用程序时,我可以恢复存储在前一个实例中的那些.要初始化alamofire我使用:

let manager = Alamofire.Manager.sharedInstance
Run Code Online (Sandbox Code Playgroud)

我加载cookie的代码是:

let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL)
Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil)
Run Code Online (Sandbox Code Playgroud)

但是,当我重新启动手机时,它会忘记所有的cookie.

小智 16

对于Swift 3和Alamofire 4.4

1.添加保存cookie的方法 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()
}
Run Code Online (Sandbox Code Playgroud)

2.在Alamofire中使用saveCookies()

Alamofire.request(urlString).responseJSON { response in
    saveCookies(response)
}
Run Code Online (Sandbox Code Playgroud)

3.添加从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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

4.之前使用loadCookies() Alamofire.request()


Ale*_*huk 9

1.添加保存cookie的方法 NSUserDefaults

func setCookie (cookie:NSHTTPCookie)
{        
    NSUserDefaults.standardUserDefaults().setObject(cookie.properties, forKey: "kCookie")
    NSUserDefaults.standardUserDefaults().synchronize()
}
Run Code Online (Sandbox Code Playgroud)

2.重启后检索它们的方法

func getCookie () -> NSHTTPCookie
{
    let cookie = NSHTTPCookie(properties: NSUserDefaults.standardUserDefaults().objectForKey("kCookie") as! [String : AnyObject])
    return cookie!
}
Run Code Online (Sandbox Code Playgroud)

3.从Alamofire的请求中检索cookie

let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(response.response?.allHeaderFields as! [String: String], forURL: (response.response?.URL!)!)

//Save method
setCookie(cookies.first!)
Run Code Online (Sandbox Code Playgroud)

4. getCookie在任何请求之前重启后使用方法

NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(getCookie())
Run Code Online (Sandbox Code Playgroud)

重要说明:在Swift 2.2中测试过