iOS开发--cookie管理
AFNetworking框架中提供了自动管理cookie的工具
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:BaseURL]];
manager.requestSerializer.HTTPShouldHandleCookies = YES;
[manager GET:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Set-Cookie%@",[[operation.response allHeaderFields] valueForKey:@"Set-Cookie"]);
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
for (NSHTTPCookie *cookie in cookies) {
NSLog(@"Block cookie: %@", cookie);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
在请求成功后,会保存到 [[operation.response allHeaderFields] valueForKey:@"Set-Cookie"]
下一次请求的时候,如果返回的cookie相等,不会再拿到这个值;返回不相等,会再辞储存新的值。
但不清楚发送请求的时候怎么打印cookie值,通过抓包知道cookie值都相等。
NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (cookie in [storage cookies]) { NSLog(@"%@", cookie); }
NSHTTPCookieStorage 是个储存cookie的单例,加载webview与afn用的是同一个cookie.所以不需我们在额外管理。
对于ios 来说 NSHTTPCookieStorage 会存储APP自身访问所有url的cookie,可以用domain为标志来获取自己所需要的cookie。
需要注意的是,NSHTTPCookieStorage存储的cookie在过期后会自动删除,如用户手动调整时间超过期时间则系统也会自动删除,因此某些业务逻辑需要注意。
更多资料:
http://stackoverflow.com/questions/2662530/iphone-nshttpcookie-is-not-saved-across-app-restarts 存取cookie