iOSHttp獲取cookie的兩種形式

事情的原因是公司項目需要做cookie做權限驗證,經過就是四處的找資料,結果就是各種的坑,最后成功的解決了問題

因為沒有做過cookie方面的驗證,所以開始的時候找到了一些資料

第一種:::::::::::::::::::::

http://blog.csdn.net/kevindongkun/article/details/50728145原文在這里代碼我就直接復制過來了

(1).cookie 的獲取與保存

//請求一個網址,即可分配到cookie

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

manager.responseSerializer = [AFJSONResponseSerializernew];

[manager GET:urlString parameters:dicsuccess:^(AFHTTPRequestOperation *operation,idresponseObject) {

//獲取cookie

NSArray*cookies = [[NSHTTPCookieStoragesharedHTTPCookieStorage] cookies];

//把cookie進行歸檔并轉換為NSData類型

NSData*cookiesData = [NSKeyedArchiverarchivedDataWithRootObject:cookies];

//存儲歸檔后的cookie

NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];

[userDefaults setObject: cookiesData forKey:@"cookie"];

} failure:^(AFHTTPRequestOperation *operation,NSError*error) {

//請求數據失敗

}];

(2).cookie的設置

//取出保存的cookie

NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];

//對取出的cookie進行反歸檔處理

NSArray*cookies = [NSKeyedUnarchiverunarchiveObjectWithData:[userDefaults objectForKey:@"cookie"]];

if(cookies) {

//設置cookie

NSHTTPCookieStorage*cookieStorage = [NSHTTPCookieStoragesharedHTTPCookieStorage];

for(idcookie in cookies) {

[cookieStorage setCookie:(NSHTTPCookie*)cookie];

}

}else{

NSLog(@"cookie設置失敗");

}

(3).cookie的刪除

把獲取到的cookie刪除掉,該步驟可以用在注銷或者切換賬號里

NSHTTPCookieStorage*cookieStorage = [NSHTTPCookieStoragesharedHTTPCookieStorage];

NSArray*cookies = [[NSHTTPCookieStoragesharedHTTPCookieStorage] cookies];

//刪除cookie

for(NSHTTPCookie*tempCookie in cookies) {

[cookieStorage deleteCookie:tempCookie];

}

下面是我的swift版的相關代碼

獲取并存儲

letcookieStorage =HTTPCookieStorage.shared

letcookieArray = cookieStorage.cookies

//NSDictionary *dict = [NSHTTPCookie requestHeaderFieldsWithCookies:array]

letdata2 =NSKeyedArchiver.archivedData(withRootObject: cookieArray)

UserDefaults.standard.set(data2, forKey:FC_COOKIE)


添加cookie

letdata =UserDefaults.standard.object(forKey:FC_COOKIE)

ifdata !=nil{

letdata2:NSArray=NSKeyedUnarchiver.unarchiveObject(with: dataas!Data)as!NSArray

forcookieindata2 {

HTTPCookieStorage.shared.setCookie(cookieas!HTTPCookie)

}

}

不知道這個cookie的獲取和添加是什么機制我們要求的是在頭里面添加cookie做驗證,理論上是會覆蓋掉追以前的cookie但是結果是我這能打印出來獲取的數據就是服務端收到的頭里面的 cookie是空的,如果有哪位大神能都解釋一下就好了————————======——————————

第二種:::::::::::::::::::::

原文在這里

http://www.lxweimin.com/p/e44c345deca5

本人比較懶直接就用作者的圖了,希望不要告我侵權,因為我都注明出處了


下面是我的swift版雖然沒啥用就是原樣模仿了一個

獲取

letresponse = take.responseas!HTTPURLResponse

letstr =response.allHeaderFields["Set-Cookie"]

FCUtils.writeUserDefault(value: stras!String, key:"user") //這個是本地的存本地的userdefault


添加到頭里

letscook =FCUtils.fetchUserDefaultWithKey(key:"user")

if!scook.isKind(of:NSNull.self) {

Static._shareClient?.requestSerializer.setValue(scookas?String, forHTTPHeaderField:"Cookie")

}


最后的結果就是成功的和服務端對接好,用的是第二種添加到header中,第一種的設置方法還真是不知道原理,希望大神艾特賜教一下

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容