一般情况下如果我们的我们做登录就是不想让我们的账号密码被人抓到!最开始使用一个特殊标识来做的那样的话就算是拿到那个标识也没啥用处。不过那是遇到不怎么牛的人拿到才行。要是牛人拿到了还可以模拟登录!那要是我们程序内部没什么特俗的地方还好要是牵扯到财产问题,那不用说也知道多么的严峻。不过程序内部如果有这方面牵扯的最好做一些比如加密处理的!至少不能让别人轻易的拿到那些东西!好了废话不多说了上代码!写得不好有什么不足的地方忘指点!
说那么多只是为了提醒一下大家!没别的意思!
使用:cookie 分五个步骤 《获取Cookie,本地存储cookie,取本地cookie值,拼接需求参数,设置请求头》
首先我们需要在登录的时候获取到存有特殊标识的cookie两种方式在登录接口回调成功的时候
a.(个人建议使用这种方式获取到的cookie不是很建议使用第二种,第二种很容易获取到其他地方不知哪里跑来的值) AFHTTPSessionManager* manager = [AFHTTPSessionManagermanager];
manager.responseSerializer.acceptableContentTypes= [NSSetsetWithObject:@"text/html"];
manager.requestSerializer.timeoutInterval=5.0f;
[managerPOST:urlStrparameters:dicprogress:^(NSProgress*_NonnulluploadProgress) {
}success:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject) {
resultStr = responseObject[@"result"];
msgStr = responseObject[@"msg"];
if([resultStrisEqualToString:@"1"]) {
//开始获取
NSHTTPURLResponse* response = (NSHTTPURLResponse* )task.response;
NSString* dataCookie = [NSStringstringWithFormat:@"%@",[[response.allHeaderFields[@"Set-Cookie"]componentsSeparatedByString:@";"]objectAtIndex:0]];
//存储需要的那个值而这里我自己需要的一个特俗标识只需要用到名字和value,所以我进行了分割
[[NSUserDefaultsstandardUserDefaults]setObject:dataCookieforKey:@"cookie"];
NSLog(@">>>>>>>>>获取到的cookie = %@ <<<<<<<<<<< and >>>>>>>需要的PHPSESSIONID = %@ <<<<<<<<",response.allHeaderFields[@"Set-Cookie"],dataCookie);
}
NSLog(@"登录返回数据--------%@",responseObject);
}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {
NSLog(@"登录返回错误--------%@",error);
}];
b.(这种方式不建议使用,不过还是自己看着来吧!主要还是要看那个domain的值如果domain取到的是这样的“a.b.c”是自己的域名的最好了,这个方式很可能获取到了domain为百度的)
NSHTTPCookie version:1 name:"BAIDUID" value:"613D4272DE094539548F4F7890FC8DF8:FG=1" expiresDate:2017-12-02 07:09:06 +0000 created:2016-12-02 07:09:06 +0000 sessionOnly:FALSE domain:".baidu.com" partition:"none" path:"/" isSecure:FALSE
NSHTTPCookie version:0 name:"PHPSESSID" value:"98uli60qioai5oqm7devglfrk3" expiresDate:(null) created:2016-12-10 03:30:27 +0000 sessionOnly:TRUE domain:"m.kuaqu.hk" partition:"none" path:"/" isSecure:FALSE
看你们自己看!这个数据第一个是不是获取到了百度的啦?哇咔咔!接下来看代码
AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes= [NSSet setWithObject:@"text/html"];
manager.requestSerializer.timeoutInterval=5.0f;
[managerPOST:urlStrparameters:dicprogress:^(NSProgress*_NonnulluploadProgress) {
}success:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject) {
resultStr = responseObject[@"result"];
msgStr = responseObject[@"msg"];
if([resultStrisEqualToString:@"1"]) {
//开始获取
NSHTTPCookieStorage* cookies = [NSHTTPCookieStoragesharedHTTPCookieStorage];
for(NSHTTPCookie * cookie in cookies.cookies
){
NSLog(@"%@",cookie);
}
在这儿哇咔哒
}
NSLog(@"登录返回数据--------%@",responseObject);
}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {
NSLog(@"登录返回错误--------%@",error);
}];
好了获取到了并且存储了! 那就到取出使用了。
《使用》
AFHTTPSessionManager* manager = [AFHTTPSessionManagermanager];
manager.responseSerializer.acceptableContentTypes= [NSSetsetWithObject:@"text/html"];
manager.requestSerializer.timeoutInterval=5.0f;
NSString* headerCookie = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"cookie"];
if(headerCookie!=nil&& headerCookie.length>0) {
[manager.requestSerializer setValue:headerCookieforHTTPHeaderField:@"Cookie"];
}
看到很大的这两句了么?这就是使用了以后都在请求的时候把这个请求头放进去就好了。这不就安全多了?而且更好的是啥?当人家在其他机子上登录你的账号的时候服务器随便都能检测到你的那个cookie的变化了!如果嫌麻烦还可以直接使用get请求直接拼接进去~为了安全起见还可以加密一下!啧啧放心多了!就到这儿了。我自己使用做的一点削笔机