ios 网络通信过程cookie的使用

来源:互联网 发布:vr看小说软件 编辑:程序博客网 时间:2024/06/06 02:55

今天做项目接口需要用到http通信传输将数据传存储到cookie进行通信,在网上找了一些方法,都是关于如何操作cookie的,明确指出如何将cookie配置到http请求体内的blog不多,现在说明如下:
在进行一个网络通信之后设备就会产生Cookie数据:

1:Cookie的获取

如果获取的Cookie为空,那么发起一个网络请求即可产生Cookie;

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];for (NSHTTPCookie *cookie in [cookieJar cookies]) {   NSLog(@"%@", cookie);}

2:Cookie的清除

获取所有Cookie然后删除;

  NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];  NSArray *_tmpArray = [NSArray arrayWithArray:[cookieJar cookies]];  for (id obj in _tmpArray) {    [cookieJar deleteCookie:obj];  }

3:Cookie的设置

设置指定的Cookie,这样做只会设置Cookie到系统,在进行网络请求的时候并不会带着Cookie到服务端,这是很多blog未提及的;

NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];  [cookieProperties setObject:@"username" forKey:NSHTTPCookieName];  [cookieProperties setObject:@"password" forKey:NSHTTPCookieValue];  [cookieProperties setObject:@"io" forKey:NSHTTPCookieDomain];  [cookieProperties setObject:@"com" forKey:NSHTTPCookieOriginURL];  [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];  [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];  NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];  [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

上面说了Cookie的一些操作,现在对如何在请求中带着cookie通信

1:苹果自带网络请求库携带cookie通信

    //Cookie的基本设置    NSDictionary *properties = [[NSMutableDictionary alloc] init];    [properties setValue:cookieValue forKey:NSHTTPCookieValue];    [properties setValue:cookieKey forKey:NSHTTPCookieName];    [properties setValue:@"" forKey:NSHTTPCookieDomain];    [properties setValue:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];    [properties setValue:@"/" forKey:NSHTTPCookiePath];    NSHTTPCookie *cookie = [[NSHTTPCookie alloc] initWithProperties:properties];    NSArray *cookies=[NSArray arrayWithObjects:cookie,nil];    NSDictionary *headers=[NSHTTPCookie requestHeaderFieldsWithCookies:cookies];    //将cookie塞进Request请求    NSURL *url = [NSURL URLWithString:pathStr];    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    request.timeoutInterval = self.timeoutInterval;    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];    [request setValue:[headers objectForKey:@"Cookie"] forHTTPHeaderField:@"Cookie"];

这样就可以把cookie带到服务端进行通信了;

2:AFN携带cookie通信
同样,关于AFN如何携带cookie进行通信,网上的一些资料说的不是很明确,现说明如下:

    NSString *cookieValue = @"AQIC5wM2LY4SfcxpzbIz4Pm51J82O5VFMd50x_es65I1DNU.*AAJTSQACMDEAAlNLABM1NjQ2MDM4ODMzNDI0NDkxOTcy*,JSESSIONID=50B3DDCD8ADDA7ACB3E5C36EFD0BB62F";    NSString *cookieKey = @"iPlanetDirectoryPro";    //Cookie的基本设置    NSDictionary *properties = [[NSMutableDictionary alloc] init];    [properties setValue:cookieValue forKey:NSHTTPCookieValue];    [properties setValue:cookieKey forKey:NSHTTPCookieName];    [properties setValue:@"" forKey:NSHTTPCookieDomain];    [properties setValue:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];    [properties setValue:@"/" forKey:NSHTTPCookiePath];    NSHTTPCookie *cookie = [[NSHTTPCookie alloc] initWithProperties:properties];    NSArray *cookies=[NSArray arrayWithObjects:cookie,nil];    NSDictionary *headers=[NSHTTPCookie requestHeaderFieldsWithCookies:cookies];    NSMutableDictionary *dic = [NSMutableDictionary dictionary];    [dic setObject:tokenIdValue forKey:tokenIdKey];    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];    //将Cookie绑定request请求    [manager.requestSerializer setValue:[headers objectForKey:@"Cookie"] forHTTPHeaderField:@"Cookie"];    [manager GET:urlString parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {    }];

上述2种方式亲测可行;

0 0
原创粉丝点击