使用Swift讀取Cookie內容

前言

一個http請求中,咱們常常會涉及到Get請求的URL Param,POST請求的HTTP Body,Response Json,這些都是一個標準REST API標配的元素。 html

在一些安全驗證的API中,一般會涉及到Cookie。當用戶成功登錄後,服務器會在Response Header中寫入一個Set-Cookie字段,用來標識用戶已經登錄(受權)成功,客戶端瀏覽器接收後會把這個Cookie字段保存在客戶端本地。當客戶端再次請求API時,就會在Request Header中帶上這個Cookie值,告訴服務器:嗨,我已經受權過咯,個人cookie值是xxx,我如今要讀取一些信息,請放行~ ios

IOS中的網絡請求

一個完整的網絡請求,須要先肯定Request URL,帶上參數,而後發送Request,而後接收Response,處理Response Data。 瀏覽器

在IOS中,分別對應以下: 安全

//Request URL
NSURL

//一個完整的Request對象
NSURLRequest

//發送請求鏈接的主要操做者
NSURLConnection

//包含返回數據的Response
NSURLResponse

下面是一個簡單的GET請求代碼: 服務器

let request = NSURLRequest(URL: NSURL(string: "http://devonios.com")!)
 NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response, nsData, error) -> Void in
            //處理返回數據nsData
}

使用Paw程序觀察HTTP請求中的Cookie

Paw是一個OS X系統下很是棒的測試HTTP REST API的程序。咱們用它來看看一個Request和Response中的Cookie是如何表現的。 cookie

Response中的Cookie: 網絡

Paw程序也是很是的智能的,當一個Response中包含了Cookie,會自動保存到默認的Cookie Jar中。 iphone

能夠在這裏看到Paw保存的Cookie: 測試

保存的Cookie數據: spa

Cookie已經保存下來了,那麼當咱們再次發送一個Request時,就會自動帶上Cookie:

Cookie在哪裏

你可能會發現,在NSURLRequest和NSURLResponse中並無Cookie相關的方法或者屬性。

不用納悶。由於IOS爲咱們設計了一個獨立的專門用來管理Cookie數據的類:NSHTTPCookieStorage,其中一個Cookie數據對應一個NSHTTPCookie類。

NSHTTPCookie是對一個Cookie數據的封裝,以便咱們讀取Cookie內容。

其實默認狀況下,咱們能夠不用管Cookie的,若是Response中帶有Cookie,IOS會自動調用NSHTTPCookieStorage,把Cookie數據保存下來。當有新的請求時,NSURLRequest會自動帶上相應的Cookie數據。

可是,重點來了,我想讀取下Cookie呢,我想判斷下Cookie值呢?我該如何手動在Request中插入一個Cookie呢?

IOS安全因素,不一樣APP之間是沒法共享Cookie的。

NSHTTPCookieStorage讀取Cookie

首先咱們要先獲取存放Cookie數據的Storage:

public class func GetCookieStorage()->NSHTTPCookieStorage{
       return NSHTTPCookieStorage.sharedHTTPCookieStorage()
 }

有了Storage獲取Cookie就很簡單了:

public class func GetCookieArray()->[NSHTTPCookie]{
    
    let cookieStorage = GetCookieStorage()
    let cookieArray = cookieStorage.cookies
    if let arr = cookieArray{
        return cookieArray as! [NSHTTPCookie]
    }
    else{
        return []
    }
}


在這個func中,咱們經過使用NSHTTPCookieStorage的cookie對象來獲取全部Cookie,類型是一個包含NSHTTPCookie的Array。

暫停下,NSHTTPCookie是什麼鬼?它有哪些屬性和方法,我讀Cookie值該怎麼寫?別懼怕,這時該是咱們的Dash大神上場啦!

查看關於Dash介紹的文章

打開咱們的Dash,在左上角輸入NSHTTPCookie,接着就是這樣了:

徹底沒有難度:

/// 獲取Cookie值
public class func GetCookieByName(let cookieName:String)->String?
{
    let cookieArray:[NSHTTPCookie] = GetCookieArray()
    var value:String?
    if cookieArray.count > 0
    {
        for cookie in cookieArray
        {
            if cookie.name == cookieName
            {
                value = cookie.value
                break
            }
        }
    }
    return value
}
這個func中,咱們經過傳一個cookie名稱,即可以拿到對應的值。

關於IOS中怎麼讀cookie就這樣結束啦,很是的簡單把。

參考資料

http://stackoverflow.com/questions/2053568/managing-http-cookies-on-iphone

tips:

本文由wp2osc導入,原文連接:http://devonios.com/get-cookie.html

因爲OSChina的OpenAPI在處理content參數時會自動過濾img標籤,因此沒法顯示圖片,詳見

相關文章
相關標籤/搜索