事情的原因是公司项目需要做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.jianshu.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中,第一种的设置方法还真是不知道原理,希望大神艾特赐教一下