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];
        }
    }
}  
时间: 2024-12-29 11:18:32

ios AFNetworking---cookie(session)保持登陆会话状态的相关文章

cookie,session,sessionid

http协议是无状态的,意思是每次请求的状态不会保存.因此,产生了cookie,session之类保存会话状态的机制.1.什么是cookiecookie将信息存储在客户端浏览器中.cookie的内容主要包括:key,value,expire_time,path(路径),domain(域)浏览器发送请求是会查找对应的path,domain,把符合的cookie自动发送给服务器. 2.什么是sessionsession在服务器端生成,然后会将对应的sessionid在浏览器端使用cookie保存起来

利用session+application+cookie 实现单态登陆,且解决浏览器意外关闭的问题

最近在帮朋友做一个购物网站,里面涉及到了登陆的问题.其中包括后台管理员的登陆和用户的登陆. 在这个网站中,设计了后台管理员单态登陆,即一个账号只能有一个登陆实例.很容易想到的就是用application实现,在application中放置一个hashmap,储存登陆的管理员信息.同时为了实现登陆超时,也在session中存放登陆对象,通过设置session的listener监控session的消亡,移除application中的对象.那么问题来了,如果用户因为断电或者任性,非法关闭了浏览器,再打

djingo之登陆验证,cookie,session

一:会话技术: 1:什么是会话跟踪技术: 首先我们应该知道,什么是会话.当浏览器(客户端)第一次访问某个网站的时候(服务器).该浏览器便和服务器建立了单独的会话.直到浏览器关闭或服务器断开.但是一个网站有许多请求,如/login/,/index/等,而http协议是一种无状态的协议,一次请求一次链接,并不会保存状态信息.而我们一些信息,常常需要多个请求之间进行交互.既然请求无法保存登陆信息,那么可以使用会话跟踪技术来保存数据信息,进而进行多个请求之间的数据互通.实现会话跟踪技术就可以使用cook

IOS开发之记录用户登陆状态,ios开发用户登陆

IOS开发之记录用户登陆状态,ios开发用户登陆 上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了.那么我们在App开发中如何记录用户的登陆状态呢?之前在用PHP或者Java写B/S结构的东西的时候,我们用Session来存储用户的登陆信息,Session是存在服务器上仅在一次回话

iOS AFNetworking的使用

AFNetworking几乎是iOS上最常用的HTTP库了,AFNetworking也确实用起来简单,重要的API就那么几个,但是就那么几个就足够用了.下面介绍几个AFNetworking 2.x重要的API. 如果你要支持iOS6那么你应该要使用基于NSURLConnection封装的AFHTTPRequestOperationManager(推荐用manager,尽管用AFHTTPRequestOperation也可以). GET请求 AFHTTPRequestOperationManage

Django实现cookie&session以及认证系统

COOKIE&SESSION 知识储备 由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地:当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是"谁"了. cookie虽然在一定程度上解决了"保持状态"的需求,但是由于cookie本身最大支持4096字节,以及co

Cookie Session 分页

cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况. 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的. 状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留.会话中产生的数据又是我们需要保存的,也就是说要"保持状态".因此cookie就是在这样一个场景

【python爬虫】cookie & session

一.什么是cookie? cookie是指网站为了鉴别用户身份,进行会话跟踪而存储在客户端本地的数据. 二.什么是session? 本来的含义是指有始有终的一些列动作,而在web中,session对象用来在服务器存储特定用户会话所需要的属性及信息. 三.cookie和session产生的原因: cookie和session他们不属于http协议范围,由于http协议是无法保持状态,但实际情况,我们有需压保持一些信息,作为下次请求的条件,所有就产生了cookie和session. 四.cookie

cookie&session及自定义分页

cookie&session和自定义分页 cookie由何而来? 由于HTTP协议是无状态的,即每次请求都是独立的,如:人生只如初见. 状态可以理解为客户端和服务器在某次会话中产生的数据,无状态的就是这些数据不会被保留.但在实际中,会话中产生的数据又是我们需要保存的.因此Cookie就是在这样一个场景下诞生. 什么是Cookie? Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的