美文网首页
ios开发中cookie的使用

ios开发中cookie的使用

作者: 叶小合 | 来源:发表于2018-02-27 23:17 被阅读72次

    1.cookie的概念

    Cookie是由服务器端生成,发送给User-Agent(一般是浏览器或者客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站地址时就发送该Cookie给服务器在使用UIWebView访问网站时,经常遇到的一个问题是需要登录。比如访问新浪微博,或者访问某个个人账号,但是需要直接访问url,却会被重定向到登录页进行登录。那么真正的浏览器是如何做到的直接登录?一般来说,答案都是cookies。在你第一次登录时,网站设置了cookie,浏览器保存这些携带了登录信息的cookies,以后就可以直接登录。所以我们要做的就是在url request中带上cookies。

    2.苹果系统中的cookie机制
    因为NSHTTPCookieStorage的默认策略是:NSHTTPCookieAcceptPolicyAlways。当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的cookie,如果 Cookie 存在的话,会把这些信息放在 NSHTTPCookieStorage 容器中共享,
    当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的cookie继续去请求。
    同样适用于ASIHTTPRequest,AFNetworking, Webview等,cookie常用于一些基于认证的网络请求
    NSHTTPCookieStorage 实现了一个管理cookie的单例对象(只有一个实例),每个cookie都是NSHTTPCookie类的实例,最为一个规则,cookie在所有应用之间共享并在不同进程之间保持同步。
    Session cookie(一个isSessionOnly方法返回YES的cookie)只能在单一进程中使用。
    1.获取cookie

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

    2、如果当前cookie为空,只要重新请求一个url

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://blog.cnrainbird.com"]
                                               cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
                                           timeoutInterval:3];
    
      [NSURLConnection sendSynchronousRequest:request 
                            returningResponse:nil
                                        error:nil];
    
      NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
      for (NSHTTPCookie *cookie in [cookieJar cookies]) {
        NSLog(@"%@", cookie);
      }
    

    3、清空cookie

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

    4、设置指定的cookie

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

    6.UIWebView访问网站时,经常遇到的一个问题是需要登录。比如访问新浪微博,或者访问某个个人账号,但是需要直接访问服务器返回的某个url,却会被重定向到登录页进行登录。

    1.那么真正的浏览器是如何做到的直接登录?一般来说,答案都是cookies。
    
    2.在你第一次登录时,网站设置了cookie,浏览器保存这些携带了登录信息的cookies,以后就可以直接登录。
    
    3.所以我们要做的就是在url request中带上cookies。NSMutableURLRequest中提供了- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field 方法。
    
    4.可以用来设置Http request header中的各个属性。
    

    补充

    (1)简单说不管是NSURLConnection还是UIWebView都会保留并传递服务端的cookie,重启进程,或重启系统cookie都在应用中。
    (2)多个应用间默认是不共亨cookie的
    (3)删除重装应用cookie会被清除   
    

    关于ios中cookie的使用案列:ios中Cookie的使用

    相关文章

      网友评论

          本文标题:ios开发中cookie的使用

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