和后台一起做demo,验证验证码后台需要根据session分辨我的验证码是iOS传的还是android传的。做一下小记录。
iOS中的session存放在cookie中,cookie就像多个字典.其中的一个放着我们要的session。
我需要的那条cookie打印出来是:
<NSHTTPCookie version:0 name:"JSESSIONID" value:"6A33E2CA6AB31D11DC8AB1A63CA0DF76" expiresDate:(null) created:2016-12-20 02:40:46 +0000 (5.03894e+08) sessionOnly:TRUE domain:"192.168.1.100" path:"/webspring/" isSecure:FALSE>
其中JSESSIONID对应的值6A33E2CA6AB31D11DC8AB1A63CA0DF76就是我想要的了,这个是后台需要验证的东西。
我的做法是在第一次请求成功后,拿到session的值,保存下来
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
DDLog(@"cookieStorage: %@", cookieStorage);
for (NSHTTPCookie *cookie in [cookieStorage cookies]) {
DDLog(@"-----cookie: %@", cookie);
if ([
cookie.name isEqualToString:@"JSESSIONID"]) {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setValue:cookie.value forKey:@"JSESSIONID"];
}
}
然后在下一次请求前把得到的session值赋值给session
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"JSESSIONID" forKey:NSHTTPCookieName];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[cookieProperties setObject:[userDefaults valueForKey:@"JSESSIONID"] forKey:NSHTTPCookieValue];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
然后后台就说我这session操作可以了。自己不是很懂,参考网址iOS开发session验证问题。