OAuth2.0验证得到了广泛的应用,其中微博和人人都是用了这种认证方式。在IOS开发微博和人人的客户端时,首先要解决的问题就是微博的绑定和解除绑定。绑定比较容易解决,按照官方提供的OAuth流程即可实现。而解除绑定比较麻烦,需要考虑IOS的网络请求过程的缓存机制。
IOS网络请求一般是用NSURLRequest类,而IOS采用NSURLRequest请求时会帮你主动记录下来你访问的站点设置的cookie,而且很很有效,以至于要解除绑定有些麻烦,即当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的cookie继续去请求。这个规律甚至适用于ASIHTTPRequest。不管怎么样,当你做一些基于认证的网络请求时,cookie不失为一个完美的解决方案。
IOS的NSHTTPCookie类cookie的属性有很多,具体可参考NSHTTPCookie Class Reference。
下面说说如何获得cookie。
查看程序中保存的所有cookie:
- NSHTTPCookieStorage *allCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
- for (NSHTTPCookie *cookie in [allCookie cookies]) {
- NSLog(@"%@", cookie);
- }
- NSHTTPCookieStorage *allCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
- NSArray *cookieArray=[allCookie cookiesForURL:request.URL];//request.URL即为请求的源地址
- for(id obj in cookieArray)
- {
- [allCookie deleteCookie:obj];
- }
- NSHTTPCookieStorage *allCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
- NSArray *cookieArray=[allCookie cookies];//返回保存所有的cookie
- for(id obj in cookieArray)
- {
- [allCookie deleteCookie:obj];
- }
- NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
- [cookieProperties setObject:@"username" forKey:NSHTTPCookieName];
- [cookieProperties setObject:@"renren" forKey:NSHTTPCookieValue];
- [cookieProperties setObject:@"renren.com" forKey:NSHTTPCookieDomain];
- [cookieProperties setObject:@"renren.com" forKey:NSHTTPCookieOriginURL];
- [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
- [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
- NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
好多关于cookie的东西,需要慢慢的研究!