zoukankan      html  css  js  c++  java
  • ios AFNetworking---cookie(session)保持登陆会话状态

    AFNetworking是最令人喜欢的ios网络库,它构建于在NSURLConnection, NSOperation等Foundation技术之上,奉承的话不多说了,今天记录一下关于使用它又遇到的一个小问题。

    ----------------------------------------我是分割线-------------------------------------

    平时公司的项目是利用登陆后获取到一个token(令牌),当再次请求该用户的其他信息时,在post请求的body,添加token参数即可。

    [self.manager POST:接口 parameters:@{@"参数名"123,@“token”:} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"%@",[error description]);
        }];

    但是后台服务器是利用web的cookie保持登陆会话状态,所谓cookie是为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。

    所以AFNetworking中并没有专门为cookie封装的代码,不过底层使用的是NSURLRequest,所以我们可以获取到请求时服务器返回的cookie

    NSString*urlStr=[NSString stringWithFormat:@"你的接口?username=%@&password=%@",account,password];
    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: [NSURL URLWithString:urlStr]];//得到cookie
    NSString*JSESSIONID=@"";
            for (NSHTTPCookie*cookie in cookies) {
                if ([cookie.name isEqualToString:@"JSESSIONID"]) {
                    JSESSIONID=cookie.value;
                }
            }
    //ps :我们也可以得到cookie里面的session和其他信息
    //将得到的cookie保存一下
            NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookies];
            [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"cookie"];
            [[NSUserDefaults standardUserDefaults] synchronize];

    好了,通过以上方法,我们得到了cookie和session。

    重点来了,当再次请求时,我们可以设置一下cookie:

    NSString *cookieStr = [NSString stringWithFormat:@"JSESSIONID=%@",JSESSIONID];//可以设置一下session,也可以添加其他的信息
    [self.manager.requestSerializer setValue:cookieStr forHTTPHeaderField:@"Cookie"];//设置到headerField

    可以打印一下:

    NSLog(@"%@",self.manager.requestSerializer.HTTPRequestHeaders);

    ----------------------------------------------------我是分割线------------------------------------------

    刚才说了那么多,其实说的都是废话,因为AFNetworking是自动保持cookie的,我们不用去刻意处理它(获取与上传),除非你有一些需要

    当然您也可以设置不用保持cookie

    [self.manager.requestSerializer setHTTPShouldHandleCookies:YES];//默认是yes

    如果你的项目后台是用cookie保持登陆会话状态,具体因项目而异,登陆完成后,不用做任何处理,直接post请求,afnetworking自动保持cookie,不用自己去上传cookie(session)。

    当然你也可以删除cookie

    NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];  
        NSArray *cookies = [NSArray arrayWithArray:[cookieJar cookies]];  
        for (NSHTTPCookie *cookie in cookies) {  
            if ([[cookie name] isEqualToString:key]) {  
                [cookieJar deleteCookie:cookie];  
            }  
        }  
    }  
  • 相关阅读:
    【转】深入理解JavaScript闭包(closure)
    【转】js之匿名函数
    【转】jQuery选择器大全
    模拟切水果的游戏以达到对JavaScript的一些基本语法操作的练习
    JavaScript增加一个随机颜色的div,并在一定时间后div自动消失
    程序猿,千万别说你不了解Docker!
    了解ASCII、gb系列、Unicode、UTF-8的区别
    ASCII、Unicode、GBK和UTF-8字符编码的区别联系
    X86服务器、小型机、大型机、塔式、机架式、刀片式服务器、工作站
    云、Iaas、Paas、Saas
  • 原文地址:https://www.cnblogs.com/oldk/p/5264559.html
Copyright © 2011-2022 走看看