美文网首页iOS Dev
swift3.0 Alamofire cookie 持久化

swift3.0 Alamofire cookie 持久化

作者: lesliefang | 来源:发表于2017-01-03 09:04 被阅读2105次

    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 写的太多。

    相关文章

      网友评论

        本文标题:swift3.0 Alamofire cookie 持久化

        本文链接:https://www.haomeiwen.com/subject/wapgvttx.html