公司在https服务器(端口443)进行正常登陆业务等处理 https://ip1:443/ 然后在端口444服务器进行资料文件上传等处理 https://ip1:444/ 因为服务器在https://ip1:443/登陆成功之后对cookie中的session进行校验保存,而一旦出现访问443->444->443,就是进行文件上传操作后,再调用443端口后,服务器对session校验失败,出现会话超时问题
因为session状态是靠cookie中存储的jsessionid实现的,所以,由于两个服务器的sessionid,名称、域、路径都一样,导致sessionid被覆盖,从而导致session失效;由此也得出cookie是不区分端口的。
cookie不区分端口号 cookie区分域、路径、名称
在访问另一个端口前,把cookie缓存到本地,然后在返回443端口后,再把cookie重新写入
导出cookie并缓存:
//导出cookie
NSHTTPCookieStorage* nCookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* nCookies = [nCookies cookiesForURL:[NSURL URLWithString:urlStr]].copy;
for(NSHTTPCookie*cookie in nCookies)
{
if([cookie isKindOfClass:[NSHTTPCookie class]])
{
if([cookie.name isEqualToString:@"JSESSIONID"])
{
NSNumber*sessionOnly =[NSNumber numberWithBool:cookie.sessionOnly];
NSNumber*isSecure = [NSNumber numberWithBool:cookie.isSecure];
NSArray*cookies = [NSArray arrayWithObjects:cookie.name, cookie.value, sessionOnly, cookie.domain, cookie.path, isSecure,nil];
[[NSUserDefaults standardUserDefaults]setObject:cookies forKey:@"cookies"];
break;
}
}
}
读取cookie并写入:
-(void)loadCookies
{
NSArray*cookies =[[NSUserDefaults standardUserDefaults]objectForKey:@"cookies"];
if(cookies.count>0)
{
NSMutableDictionary*cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:[cookies objectAtIndex:0]forKey:NSHTTPCookieName];
[cookieProperties setObject:[cookies objectAtIndex:1]forKey:NSHTTPCookieValue];
[cookieProperties setObject:[cookies objectAtIndex:3]forKey:NSHTTPCookieDomain];
[cookieProperties setObject:[cookies objectAtIndex:4]forKey:NSHTTPCookiePath];
NSHTTPCookie*cookieuser = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage]setCookie:cookieuser];
}
}
PS:AFNetworking也能用相同处理办法
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有