本片文章是对上一篇文章(iOS版SessionID概念理解及demo教程)的深度解析和继续完善迭代......
上一篇提到了登陆按钮触发后,调用setCookies方法,然后在x-code的appdelegate里调用getCookies方法,及登陆后每次的运行都是从appdelegate的getcookies方法里读取上一回的cookies里的sessionid,在发送网络请求前读取cookies。
后来大神再次告诉我,这种方法不可取,会出现很多问题。因为:1.AFNetWorking本身已经封装了对sessionid的,里面有一个AFHTTPSessionManager : AFURLSessionManager类封装了sessionID,就不需要在用NSHTTPCookieStorage * cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];来保存cookies了,AFNetWorking里面并没有NSHTTPCookieStorage,NSHTTPCookieStorage是iOS原生的一个类。2.用了NSHTTPCookieStorage保存cookies的话在第二天上班前打开工程运行时,任何app都会出现sessionid失效,检测出cd=-900,msg=未登陆。(cd=-900,msg=未登陆是我们的后台服务器对sessionID失效时的返回数据)
这是需要重新登陆下(此情景就是比如说为操作下sessionid的失效的时间是30mins,当你第31分钟操作时就会失效,同样返回cd=-900,msg=未登陆JSON数据)在这种情景下我做的逻辑是让app弹出登陆界面让他重新登陆一下。3.用了NSHTTPCookieStorage保存cookies要在每次运行后都需要发送请求来检测是否sessionid失效,
这里的[self loginAgain] 就是调用发送get或者post网络请求的方法来检测是否返回cd==-900未登陆状态下,若是就弹出登陆界面......
基于以上的种种繁琐原因,大神告诉我用:
get:
也就是把上一篇文章的 [self postDataWithUrl:LOGIN_URL parameters:loginparame finish:^(id result, SERVER_RETURN_CODE returnCode) {
}];方法放在了[HTTPSessionManager GET:url parameters:mutableDict progress:nil success:方法里检测他是否返回cd==-900未登陆,是就发送登陆的请求,正确后再调用自己本身的get方法。
post:
总之就是把检测放在了[HTTPSessionManager GET:url parameters:mutableDict progress:nil success:里返回的id responseObject判断
这样做的优点就是当sessionID失效时就在对AFNetWorking封装的HttpTool方法里检测,失效就自动发送登陆请求后在调用自己的get或者post请求,避免了繁琐的代码量。sessionID失效后(第二天早上第一次打开运行时不用再次弹出登陆界面,发送登陆请求是代码做的,用户肉眼并不会看到)。这样就可以无限次的相隔很久时间再次运行,发送网络请求依旧可以获取到正确数据,说白了也是失效时检测到后再次登陆,并没有用到什么之前的方法NSHTTPCookieStorage。也许这就是大神的思维吧,慢慢体会揣摩......
好了,iOS版SessionID概念理解及demo教程最够真正的告一段落
有什么看不到或者不明白欢迎留言或者push me!!!