紧接上篇文章,cookie的概念:
http://blog.youkuaiyun.com/lee727n/article/details/77197910
cookie的基本使用流程,请参考代码:
访问网络的时候先更新cookie,把最新的cookie放到cookiestroage中,给后台。后台会用到你本地的cookie,这份cookie可能是空,也可能是登录成功后带有用户信息的cookie。
NSData *cookiesData = [[NSUserDefaults standardUserDefaults]objectForKey:kUserDefaultsCookie];
if ([cookiesData length]) {
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesData];
NSHTTPCookie *cookie;
for (cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage]setCookie:cookie];
}
NSLog(@"%@",[[NSHTTPCookieStorage sharedHTTPCookieStorage].cookies description]);
NSHTTPCookie是一个cookie的对象,而NSHTTPCookieStorage是存储cookie的地方,是个数据,可以放很多组cookie,接下来获取网络数据成功以后,保存cookie。注意这里说的保存cookie是保存到本地。紧接上一段代码。这里cookieStorage中的cookie已经是服务器重新返回的cookie了,可能是修改过的,也可能是服务器没进行处理的。总之这里放到不是我们刚才从本地放到storage中的那份cooke,是经过后台重新返回来的最新cookie。
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookies];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"set-cookie"];
for (NSHTTPCookie *cookie in cookies) {
NSLog(@"cookies 域名:%@ Name: %@", cookie.domain , cookie.name);
NSLog(@"%@",cookie);
}
cookie需要配合userdefault本地存储来使用。上述代码封装到网络解析类中,接下来我们就可以拿到cookie中的想要的信息,比如个人信息 我们拿到昵称
_userNameLB.text = [Tools returnCookieValueWithCookieName:@"_staff_no"];
封装方法如下:
+(NSString *)returnCookieValueWithCookieName:(NSString *)cookieName
{
NSString * str = @"";
NSData *cookiesData = [[NSUserDefaults standardUserDefaults]objectForKey:@"set-cookie"];
if ([cookiesData length]) {
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesData];
for (NSHTTPCookie *cookie in cookies) {
if ([cookie.name isEqualToString:cookieName]) {
str = cookie.value;
}
}
}
return str;
}