iOS 獲取準(zhǔn)確的Cookie

項目上需要將服務(wù)器返回的cookie上的sid項保存到本地用于維護(hù)一個長登陸狀態(tài)
網(wǎng)上獲取Cookie的方法一般是這樣的

  let cookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
                    var sid: String?
                    let cookieArray = cookieStorage.cookies 
                   
                    for cookie in cookieArray {
                        if cookie.name == "sid" {
                            //獲取cookie的sid對應(yīng)的值
                            sid = cookie.value
                            break
                        }
                    }

但是cookie數(shù)組里含有name為sid的會有多項,這樣無法精確獲取一個cookie,后來知道NSHTTPURLResponse里有一項allHeaderFields屬性,allHeaderFields是一個[string:AnyObject]類型的字典,里面是原始Http響應(yīng)頭部,打印一下,

[Server: nginx, Set-Cookie: sid=6udoy4al4bk8vk8qr0x0jq6oninx9f8f; expires=Mon, 07-Aug-2017 08:41:58 GMT; Max-Age=31536000; path=/, Content-Type: application/json, Transfer-Encoding: Identity, Proxy-Connection: Keep-alive, Date: Sun, 07 Aug 2016 08:41:58 GMT, Content-Encoding: gzip, Vary: Accept-Encoding]

里面有一項"Set-Cookie",是一個字符串

Set-Cookie: sid=6udoy4al4bk8vk8qr0x0jq6oninx9f8f; expires=Mon, 07-Aug-2017 08:41:58 GMT; Max-Age=31536000; path=/

這樣我們就可以寫個函數(shù)截取這個sid的內(nèi)容了
隨手寫了

//對應(yīng)上面的打印內(nèi)容 cookieStr為"sid=6udoy4al4bk8vk8qr0x0jq6oninx9f8f; expires=Mon, 07-Aug-2017 08:41:58 GMT; Max-Age=31536000; path=/"
//name為"sid"
 class func getSetCookieOneContentWithName(cookieStr: String,name:String) -> String {
        let cookieTempStr = cookieStr as NSString
        if cookieTempStr.containsString(name) == false
        {
            return ""
        }
        let range = cookieTempStr.rangeOfString(name)
        //加1是等號
        let contentStart = range.location+range.length+1
        var length = 0
        for i in contentStart..<cookieTempStr.length {
            let str = cookieTempStr.substringWithRange(NSRange.init(location: i, length: 1))
     
            if str != ";" {
                length += 1
            }
            else {
                break
            }
        }
        let contentRange = NSRange.init(location: contentStart, length: length)
        return cookieTempStr.substringWithRange(contentRange)
    }

好啦,這樣就可以準(zhǔn)確獲得一個網(wǎng)絡(luò)請求回調(diào)的cookie啦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容