2017-05-15 67 views

回答

3

使用NSHTTPCookie [cookiesWithResponseHeaderFields(_:forURL :)]方法從響應中獲取Cookie。

// setCookies 
func setCookies(cookies: NSHTTPCookie){ 
    Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: response.URL!, mainDocumentURL: nil) 
} 

// getCookies 
func getCookies() { 
    let parameters: [String: AnyObject] = [:] 

    Alamofire.request(.POST, "http://test.com/test", parameters: parameters).responseJSON { response in 
     if let 
      header = response.response?.allHeaderFields as? [String: String], 
      URL = response.request?.URL 
     { 
      let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(header, forURL: URL) 
      print(cookies) 
     } 
    } 
} 

夫特3:

func setCookies(cookies: HTTPCookie){ 
    Alamofire.SessionManager.default.session.configuration.httpCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil) 
} 

Alamofire.request(url, method: HTTPMethod.post, parameters: parameters).responseData { (responseObject) -> Void in 

       if let resposecode = responseObject.response?.statusCode { 
        if resposecode != 200 { 
         // error 
        } else { 
         // view all cookies 
         print(HTTPCookieStorage.shared.cookies) 
        } 
       } 
      } 
+0

我想我每次提出請求時設置默認的cookie,甚至當我關閉並重新啓動應用程序,該cookie應該是相同的。這不是我正在尋找的。 – Gaurav

+0

@krunal它如何持久地存儲cookie,如果它存在? – Haywire

+0

隨着每一個響應,你需要得到餅乾,存儲在永久/默認存儲(稱爲NSUserDefaults)。每次請求都會從永久存儲中獲取Cookie,並根據請求進行設置。 – Krunal

0

夫特3.0

let cookies = HTTPCookie.cookies(withResponseHeaderFields: response.allHeaderFields , for: response.URL!) 

Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil) 

Alamofire實例共享單,所以對於所有請求設置cookie。 希望它適合你。

+0

這是一個單一的網址或所有的網址請求,我會通過Alamofire? – Gaurav

+0

我可以知道下投票的原因嗎? – Jaydeep

1

是否這樣?

let httpCookie = HTTPCookie.init(properties: 
     [HTTPCookiePropertyKey.version : "0", 
     HTTPCookiePropertyKey.name : "MYTestID", 
     HTTPCookiePropertyKey.value : "983724dd3dea4924b8d675b0df08b611", 
     HTTPCookiePropertyKey.expires : "2027-05-13 09:21:23 +0000"]) 
    if let cookie = httpCookie { 
     HTTPCookieStorage.shared.setCookie(cookie) 
    } 
+0

即使應用程序重新啓動後,這個cookie會被存儲嗎? – Gaurav

+0

您可以在didFinishLaunchingWithOptions的Appdelegate中重新載入 – Tony

0
if let fields = response.response?.allHeaderFields as? [String : String]{ 
      let cookies = HTTPCookie.cookies(withResponseHeaderFields: fields, for: (response.request?.url!)!) 
      HTTPCookieStorage.shared.setCookies(cookies, for: (response.request?.url!)!, mainDocumentURL: nil) 
     }