前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS中相同IP,不同端口,session失效的问题

iOS中相同IP,不同端口,session失效的问题

作者头像
freesan44
发布2018-09-05 15:52:52
1.9K0
发布2018-09-05 15:52:52
举报
文章被收录于专栏:freesan44freesan44

背景

公司在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并缓存:

代码语言:javascript
复制
//导出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并写入:

代码语言:javascript
复制
-(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也能用相同处理办法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 原因
  • 处理办法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档