使用Swift讀取Cookie內容

來源:互聯網
上載者:User

標籤:

前言

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

在一些安全驗證的API中,通常會涉及到Cookie。當使用者成功登陸後,伺服器會在Response Header中寫入一個Set-Cookie欄位,用來標識使用者已經登陸(授權)成功,用戶端瀏覽器接收後會把這個Cookie欄位儲存在用戶端本地。當用戶端再次請求API時,就會在Request Header中帶上這個Cookie值,告訴伺服器:嗨,我已經授權過咯,我的cookie值是xxx,我現在要讀取一些資訊,請允許存取~

IOS中的網路請求

一個完整的網路請求,需要先確定Request URL,帶上參數,然後發送Request,然後接收Response,處理Response Data。

在IOS中,分別對應如下:

//Request URLNSURL//一個完整的Request對象NSURLRequest//發送請求串連的主要操作者NSURLConnection//包含返回資料的ResponseNSURLResponse

下面是一個簡單的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是如何表現的。

Response中的Cookie:

Paw程式也是非常的智能的,當一個Response中包含了Cookie,會自動儲存到預設的Cookie Jar中。

可以在這裡看到Paw儲存的Cookie:

儲存的Cookie資料:

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標籤,所以無法顯示圖片,詳見

使用Swift讀取Cookie內容

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.