AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
NSData *cookiesData = [[NSUserDefaults standardUserDefaults]objectForKey:kUserDefaultsCookie];
if ([cookiesData length]) {
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesData];
NSHTTPCookie *cookie;
for (cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage]setCookie:cookie];
}
[manager POST:@"url" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
@"成功";
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
@"失败";
}];
大体上的流程同方法一,只是取cookie以及构造cookie的地方不一样而已。如果懂了方法1,方法二,只是为了帮助你加深对于AFN的理解。当前方法使用的是苹果自动cookie存储的机制 NSHTTPCookieStorage
cookie使用流程参考图解:https://blog.youkuaiyun.com/lee727n/article/details/84322272
上面代码段是在请求之前构造cookie。使用的是httpcookieStorage这个类,将cookie放到storage中。而方法1是将cookie放到Request的headerField中,也就是请求头中。
继续我们的代码:
[manager POST:@"url" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
@"成功";
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookies];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:kUserDefaultsCookie];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
@"失败";
}];
同样,在访问成功之后。我们需要拿到cookie。然后存储到本地。下次请求的时候,就可以构造cookie。