AFN获取cookie与设置cookie
2018-04-28 本文已影响0人
Superman168
登录获取 Cookie
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: [NSURL URLWithString:BASE_URL]];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookies];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:kUserDefaultsCookie];
// 设置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];
}
}
项目需求,我是这样获取的:
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: [NSURL URLWithString:BASE_URL]];
if (cookies && cookies.count>0) {
NSHTTPCookie *cookieInfo = [cookies firstObject];
NSString *cookieStr = cookieInfo.value;
if (cookieStr && cookieStr.length>11) {
NSString *cookie = [cookieStr substringFromIndex:11];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookie];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:kUserDefaultsCookie];
}
}
这样设置的
// 设置cookie
NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:kUserDefaultsCookie];
if([cookiesdata length]) {
NSString *cookie = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata];
[manager1.requestSerializer setValue:cookie forHTTPHeaderField:@"Cookie"];
[manager2.requestSerializer setValue:cookie forHTTPHeaderField:@"Cookie"];
}
但是跟后台还有点出入,有用户权限的无法访问。
后又改为这样:
获取(其实和开始的获取方式是一样的):
NSInteger statusCode = response.statusCode;
NSDictionary *allHeaders = response.allHeaderFields;
NSString *cookie = [allHeaders NotNSNullobjectForKey:@"Set-Cookie"];
if (cookie && cookie.length>0) {
NSLog(@"请求的urlStr=%@",urlStr);
NSString *sessionId = [cookie componentsSeparatedByString:@";"].firstObject;
IDBSessionId = sessionId;
NSLog(@"返回头Cookie--%@--状态码%ld",allHeaders,(long)statusCode);
}
设置:
// 设置cookie
NSString *cookie = IDBSessionId ? IDBSessionId : @"";
[manager1.requestSerializer setValue:cookie forHTTPHeaderField:@"Set-Cookie"];
不知道哪一款适合你? 😜