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);
}
如果要解除绑定,即可以删除相应请求源的cookie即可。ios中如果不想使用已经保存的cookie,那么就可以根据NSURLRequest的NSURL来删除对应的cookie:
NSHTTPCookieStorage *allCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookieArray=[allCookie cookiesForURL:request.URL];//request.URL即为请求的源地址
for(id obj in cookieArray)
{
[allCookie deleteCookie:obj];
}
为了安全起见,在浏览所有网站时都不需要cookie,那么可以删除所有的cookie:
NSHTTPCookieStorage *allCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookieArray=[allCookie cookies];//返回保存所有的cookie
for(id obj in cookieArray)
{
[allCookie deleteCookie:obj];
}
如果删除了所有的cookie,但是还是想保留一些特定的cookie,可以通过手动来设置cookie:
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的东西,需要慢慢的研究!
}