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"];

不知道哪一款适合你? 😜

上一篇 下一篇

猜你喜欢

热点阅读