开发者社区> 问答> 正文

并发时Java HttpSession串号问题? 400 报错

并发时Java HttpSession串号问题? 400 报错

框架为SpringMVC+Mybatis,在用户登录时候保存用户信息到HttpSession中,而后从Session中获取用户的部分信息。在本地测试中没有问题,但是放到真实环境中,用户产生并发则出现Session串号的问题(A用户看到的不是自己的信息,而是B用户的信息,同样的B用户看到的是别的用户的信息,刷新一下又变成自己的信息),请问大家有何好的解决方案?

下面是我登录放置Session的代码:

  final Result<?> rs = userBusiness.selectByUserLogin(paraMap);
            		        if (rs.getStatusCode() != 1 || !rs.isSuccess()) {
            		            throw new AuthenticationException("用户名或密码错误.");
            		        }
            				User authUserInfo = (User)userBusiness.selectByUserTruename(paraMap).getData();
            	            if (authUserInfo != null) {
            	            	//request.getSession().setAttribute(SessionKeyCommon.LOGIN_KEY, authUserInfo);  
            	            	//UserSession.SESSION_MAP.set("user",authUserInfo);
//            	            	ThreadLocalObj.set("jzUser", authUserInfo);
            	            	r.setMessage("登录成功");
                                r.setStatusCode(1);
                                r.setSuccess(true);
                               // User us = (User)ThreadLocalObj.get("jzUser");
                                request.setAttribute("user", authUserInfo);
//                                System.out.println(session.getId());
//                                session.setAttribute(session.getId(), authUserInfo);
                                System.out.println(authUserInfo.getUserid().toString());
                                session.setAttribute(authUserInfo.getUserid().toString(), authUserInfo);
                                Map resmap = new HashMap<String,Object>();
                                resmap.put("userid", authUserInfo.getUserid().toString());
                                r.setData(resmap);
            	            } else {
            	            	r.setMessage("用户名或者密码不正确!");
                                r.setStatusCode(-1);
                                r.setSuccess(false);
            	            }



获取则是直接在session中获取,同时在jsp页面中也有部分获取操作,整个系统只有该处和验证码使用了session进行存储。


展开
收起
爱吃鱼的程序员 2020-06-01 11:56:13 545 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    1. 是否有线程安全的问题, 有没有相关信息放在成员变量里面

    2. 是否是同一个浏览器登录不同的用户 出现的你这种现象,如果是,是否是因为使用了GET方法导致浏览器缓存了?

    ######Action/Service层都没有成员变量,只有使用@Resource的引用,现在是系统一上线就发生了session串号问题,每个用户都是手机上独立登录的。######

    用它做登录吧,无窜号问题 http://www.oschina.net/p/kisso

    SpringMvc 演示 demo


    ######

    服务端可以把每个请求的地址 和 sessionId 打出来,看看sessionId是否一样的呢;同时把accesslog 开启。

    ######

    请问,你这个情况是有做负载均衡下的,还是单服务器?

    ######

    引用来自“懒神”的评论

    请问,你这个情况是有做负载均衡下的,还是单服务器?

    单服务器的

    2020-06-01 11:56:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载