Search code examples
iosswiftcookiesxcode7alamofire

Saving cookies in Alamofire (Swift)


I want to store my cookies so that when i reopen the application i can restore the ones stored in the previous instance. To initialize alamofire i use:

let manager = Alamofire.Manager.sharedInstance

And my code to load cookies is:

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

But when i reboot the phone it forgets all the cookies.


Solution

  • 1.Add method to save cookies in NSUserDefaults

    func setCookie (cookie:NSHTTPCookie)
    {        
        NSUserDefaults.standardUserDefaults().setObject(cookie.properties, forKey: "kCookie")
        NSUserDefaults.standardUserDefaults().synchronize()
    }
    

    2.And method to retrieve them after reboot

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

    3.Retrieve cookies from request in Alamofire

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

    4.Use getCookie method after reboot before any request

    NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(getCookie())
    

    IMORTANT NOTE: Tested in Swift 2.2