AFN获取cookie与设置cookie

登录获取 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"];

不知道哪一款适合你? 😜

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,164评论 25 709
  • HTTP cookie(也称为web cookie,网络cookie,浏览器cookie或者简称cookie)是网...
    留七七阅读 18,238评论 2 71
  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 10,952评论 1 49
  • 文/稻草人 从三月里 掏出一点时光的剩余 拾起一朵春花 就这样踏上旅途 忘不了 梦里那片海 星光依旧璀璨 在那无际...
    疯狂稻草人阅读 5,683评论 0 1
  • 你看你还是那么瘦小,不管是人,还是心。 一个人在意的时候,多可怜。 你瞧你的样子,多可怜多弱小。 多废物。 你怎么...
    天才少女末日酱阅读 1,144评论 0 0