1.什么是Cookies?
Cookies就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机。当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都记录下来。当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookies资料,有的话,就会依据Cookies里的内容来判断使用者,送出特定的网页内容给你。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM[1] 中。
2.为什么我要保存Cookies?
老版本公司爱啪啪的登录操作的时候,服务器会给我们一个jsessionID,此举主要目的是确定用户身份,拦截非指定用户的请求,我们在请求(上传/登录)的时候,需要将jsessionID带入请求(http://xx.x.x.xxx:xxxx;jsessionID=xxxxxx?),而在新版本中,服务器端将jsessionID等登录信息储存到了cookies中,不需要像以前那样将jsessionID带入请求的url中。
3.AFN中如何保存cookies?
百度了很多资料(相对较老),普遍的提及AFN支持cookies,但是并没有专门针对cookie封装的代码,但是由于它底层使用的是NSURLRequest,所以可以通过NSHTTPCookieStorage来操作cookie。目前我使用的是AFN->3.1.0,他会对你的cookies进行保存操作。
具体实现:设置AFHTTPSessionManager的requestSerializer的(BOOL)HTTPShouldHandleCookies为YES.(其实默认就是yes)
4.如何删除cookies?
登录的时候,他会保存cookies,那么问题来了,当我注销后再次登录的时,可能是我们公司自己的问题,在非失效时间,且未清空jsessionID之前APP再次登请求登录接口的时候,无任何返回信息(貌似是公司服务器通过对jsessionID的判断拦截了此次请求?或者是接口的逻辑处理问题?按照开发文档应该是重定向到了web端的登录界面)?当设置不保存cookies的时候,该问题不在出现。
猜想1:可以通过服务器端请求注销的接口
猜想2:动手清空当前保存的cookies
百度ing...
+(void)clearCookies{
//获取所有cookies
NSArray*array = [[NSHTTPCookieStorage sharedHTTPCookieStorage]cookiesForURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",Kserver,KlogIn]]];
// NSDictionary *dict = [NSHTTPCookie requestHeaderFieldsWithCookies:array];
//删除
for(NSHTTPCookie*cookie in array)
{
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie: cookie];
}
}
5.这样删除的问题
其中,所带的url为我们公司爱啪啪登录时候的服务器地址+登录action,清空后不会再出现上述问题。但是我在AFN中并没有找到清空cookies的方法,且目前这样使用感觉只清空了登录接口中的cookies,其他的url中的cookies,是会在登录后再次使用新的,还是沿用旧cookies?
由于我们公司的jsessionID是具有时效性的,如果是沿用旧的,那问题大大的。或者AFN 中是存在能清空cookies的方法?...希望懂的大神能解答下。iOS菜鸟,还只是个大自然的搬运工Orz...
11.24 请教了我们公司的大神,在每次请求登录(一般只有在登录的时候 服务器才会返回给你cookies)的时候,cookies是执行的更新操作,也就是说,只会存在一个cookies(类似于单例?)。因此,上述删除cookies的方法是可行的。如果我这个说法有错误,希望大神能指正下。
[1].RAM-RamdomAccessMemory 易挥发性随机存取存储器,高速存取,读写时间相等,且与地址无关,如计算机内存等。