并发时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进行存储。
1. 是否有线程安全的问题, 有没有相关信息放在成员变量里面
2. 是否是同一个浏览器登录不同的用户 出现的你这种现象,如果是,是否是因为使用了GET方法导致浏览器缓存了?
######Action/Service层都没有成员变量,只有使用@Resource的引用,现在是系统一上线就发生了session串号问题,每个用户都是手机上独立登录的。######用它做登录吧,无窜号问题 http://www.oschina.net/p/kisso
SpringMvc 演示 demo
######
服务端可以把每个请求的地址 和 sessionId 打出来,看看sessionId是否一样的呢;同时把accesslog 开启。
######请问,你这个情况是有做负载均衡下的,还是单服务器?
######请问,你这个情况是有做负载均衡下的,还是单服务器?
单服务器的
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。