iOS AFNetworking 中cookie如何使用

再开发过程我们会经常遇到请求数据时会带cookie,这个可以理解为安全验证,也是我们判断是否登录过期的,获取cookie的方式一般有两种,可能更多,但我遇到都是两种,第一种就是cookie登录成功后以返回值得方式获取到,再以参数的形式给后台。第二种就是cookie在网络协议中返回,在以同一种形式传给服务器

今天我们来说一下第二种

首先就是我们获取这个cookie,一般情况下我们这个cookie都会在登录的接口返回给我们,所以我们要做的就是在登录成功的时候记录下这个cookie值(cookie时效有后台决定,可以为7天、一个月等),那如何记录呢


#pragma mark - 
#pragma mark - --> 和网络请求的cookie使用
//缓存
+ (void)cacheCookie{
    NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults removeObjectForKey:@"Cookie"];
    [defaults setObject: cookiesData forKey:@"Cookie"];
    [defaults synchronize];
}

//cookie注册 如果AppDelegate判断有cookie 也就是登录状态 执行这个方法, 会在之后请求中带上已经缓存的cookie
+ (void)setCookie{
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"Cookie"]];
    NSHTTPCookieStorage * cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (NSHTTPCookie * cookie in cookies){
        [cookieStorage setCookie: cookie];
    }
}

这两个方法就是实现缓存cookie的方法和将cookie写入NSHTTPCookieStorage的方法,可理解为cookie的注册

怎么使用呢,就是在登录成功的回调里面我要加上这两个使用用法即可。

//缓存cookie到本地
[NetRequestClass cacheCookie];       
//cookie注册 如果AppDelegate判断有cookie 也就是登录状态 执行这个方法, 会在之后请求中带上已经缓存的cookie
[NetRequestClass setCookie];

我们也要设置一下cookie属性设值(cookie的存在形式,同样在登录成功回调里面这是一下即可),下面是设置方法:

//Cookie的本地缓存策略
// NSHTTPCookieAcceptPolicyAlways: 保存所有cookie,这个是默认值
// NSHTTPCookieAcceptPolicyNever: 不保存任何响应头中的cookie
// NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain: 只保存域请求匹配的cookie
[[NSHTTPCookieStorage sharedHTTPCookieStorage]setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

有时候我们可能需要判断cookie到底存不存在,下面这个方法就可以解决


//判断本地数据中有没有Cookie, 是判断是否登录的条件之一
+ (BOOL)getCookie{
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"Cookie"]];
    if (cookies.count > 0) {
        NSLog(@"存在cook");
        return YES;
    }else{
        NSLog(@"不存在cook");
        return NO;
    }
}

到这里cookie的一些基本设置就算完事了,下面就是在AFNetworking中cookie的使用

首先这个cookie我是存在本地的,所以我们要在本地读出这个cookie(无论cookie是什么类型,都要直接强转成字符串)

NSString *cookie = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"Cookie"]];

获取万cookie后,就是将这个cookie传给服务器,但是并不是以参数的形式传给后台,而是在AFNetworking的请求头中携带过去,下面是如何携带cookie(切记:key一点不要写错:"Set-Cookie"):

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer.timeoutInterval = 30;
    manager.requestSerializer.HTTPShouldHandleCookies = YES;
    NSString *cookie = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"Cookie"]];
    [manager.requestSerializer setValue:cookie forHTTPHeaderField:@"Set-Cookie"];
    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;

这些就是iOS开发是cookie的简单实用

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王 哪跑!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值