美文网首页
iOS cookie manager

iOS cookie manager

作者: 浅陋 | 来源:发表于2016-10-11 10:22 被阅读0次

    网上有很多cookie的用法教程,站在巨人的肩膀上总结一下我对cookie的理解,和一些自己遇到的坑:

    cookie的创建

    方法一:

    NSArray *a = [NSHTTPCookie cookiesWithResponseHeaderFields:@{@"Set-Cookie":@"username=qiandaojiang"} forURL:[NSURL URLWithString:@"http://"]];
    

    方法二:

    NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];  
    [cookieProperties setObject:@"username" forKey:NSHTTPCookieName];  
    [cookieProperties setObject:@"qiandaojiang" forKey:NSHTTPCookieValue];  
    [cookieProperties setObject:@"baidu.com"forKey:NSHTTPCookieDomain];  //可不填
    [cookieProperties setObject:@"baidu.com"forKey:NSHTTPCookieOriginURL];  //可不填 
    [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];  
    [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];  
      
     NSHTTPCookie*cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];  
    

    以上两种方式能都创建cookie,再使用NSHTTPCookieStorage来管理全局的cookie

    [cookieStorage setCookie:cookie];
    

    cookie manager策略

    NSHTTPCookieStorage可以通过制定策略来配置从接收方接收cookie的优先级

    typedef NS_ENUM(NSUInteger, NSHTTPCookieAcceptPolicy) {
        NSHTTPCookieAcceptPolicyAlways,//总是接收
        NSHTTPCookieAcceptPolicyNever,//不接收
        NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain//只接收DomainURL的cookie
    };
    

    在我多次测试的情况下,使用NSHTTPCookieAcceptPolicyNever本来的用意是不接收接收端设置的cookie,但是自己设置的cookie还是可以add上的,但是用上面cookie创建的方法一会有问题,你会发现你添加的cookie并没有添加成功,而是在Header中了!这就很尴尬了,相当于客户端添加的也拒绝了。这时候最规范的还是使用方法二,方法二还是不要用字典的 setObject 方法了,万一value为nil,会导致崩溃。

    我现在的项目不能全局都设置成Never的策略,其他的模块需要用服务端的cookie,所以我只能遍历,删除相同name的cookie,避免服务端报错。

    相关文章

      网友评论

          本文标题:iOS cookie manager

          本文链接:https://www.haomeiwen.com/subject/wqavyttx.html