iOS DeveloperiOS开发资料收集区

iOSHttp获取cookie的两种形式

2016-11-18  本文已影响2737人  SevenM

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

上一篇 下一篇

猜你喜欢

热点阅读