事情的原因是公司項目需要做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中,第一種的設置方法還真是不知道原理,希望大神艾特賜教一下