ios 网络通信过程cookie的使用

今天做项目接口需要用到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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值