并发时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 开启。
######请问,你这个情况是有做负载均衡下的,还是单服务器?
######请问,你这个情况是有做负载均衡下的,还是单服务器?
单服务器的