asihttprequest cookie

最近项目中要用Cookie来实现登录,之前的项目都是保存的帐号和加密过后的密码,对这块不是很了解。Cookie登录就是判断本地有没有Cookie有的话直接登陆,项目里的一些接口在请求中加上自定义的Cookie。项目使用的是asigttprequest这个开源框架。

后台登录的实现需要2个过程,一是保存Cookie,二是上传Cookie。

在第一次登录时要保存下Cookie的Token,这个是要需要和后台做好约定的。第一次登录时会返给你后台的Cookie信息,

[request responseCookies]方法可以得到Cookie数组的信息,

NSDictionary *headers = [request responseHeaders];

NSString *setcookie = [headers objectForKey:@"Set-Cookie"] ;

这2个方法可以得到你想要的token.在得到的token字符串中分割时你想要的信息。

这时利用NSUserDefaults把token保存下来。方便后面使用cookie登录。

接下来的工作是上传保存下来的cookie,在asihttprequest文档上也有说明。

代码如下:

[objc]  view plain copy
  1. NSDictionary *properties = [[[NSMutableDictionary alloc] init] autorelease];  
  2. [properties setValue:[NSString stringWithFormat:@"%@",[GUserSetting provider].UserCookie forKey:NSHTTPCookieValue];  
  3.       
  4. [properties setValue:@"SessionId" forKey:NSHTTPCookieName];  
  5. [properties setValue:domain forKey:NSHTTPCookieDomain];  
  6. [properties setValue:@"/" forKey:NSHTTPCookiePath];  
  7. NSHTTPCookie *cookie = [[[NSHTTPCookie alloc] initWithProperties:properties] autorelease];  
  8.       
  9. //NSLog(@"%@",cookie);  
  10. [request setRequestCookies:[NSMutableArray arrayWithObject:cookie]];  

这里需要注意的是,

NSHTTPCookieName是和服务器约定好的token,

NSHTTPCookieValue是你要刚才保存下来的token值,

NSHTTPCookieDomain和NSHTTPCookiePath一定要加上,不然会上传不成功的Cookie。

在asihttrequest时使用时要把setUseCookiePersistence设为NO;

我这样我们在用Cookie登录时只要把把保存下的Cookie上传到服务器就可以正常使用接口了,不会提示未登录。





当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的cookie,如果 Cookie 存在的话,会把这些信息放在 NSHTTPCookieStorage 容器中共享,当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的cookie继续去请求。
同样适用于ASIHTTPRequest,AFNetworking, Webview等,cookie常用于一些基于认证的网络请求

认识下NSHTTPCookieStorage
NSHTTPCookieStorage 实现了一个管理cookie的单例对象(只有一个实例),每个cookie都是NSHTTPCookie类的实例,最为一个规则,cookie在所有应用之间共享并在不同进程之间保持同步。Session cookie(一个isSessionOnly方法返回YES的cookie)只能在单一进程中使用。

Cookie
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器或者客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站地址时就发送该Cookie给服务器

HTTP header
HTTP header中包含HTTP请求与响应的操作参数. header属性定义了所传输数据的各种特性. header属性以属性名开始,以冒号结尾,最后是属性值.属性名及值会因应用的不同

ios htttp网络请求cookie的读取与写入:
1.原生NSURLConnection写法

2.AFNetworking 写法

二.清空cookie

三.手动设置cookie

request还可以这样设置个cookie

你可能感兴趣的:(asihttprequest cookie)