日期:2014-05-20  浏览次数:20754 次

有时候登录系统显示别人的用户信息
问题描述:
web应用系统部署在:www.web1.com和www.web2.com上,连接的都是同一个数据库
用AA的账号密码登录之后,得到的信息有时候是AA的信息,当并发量比较大时,有时候却是BB或CC的信息
我个人认为是web1和web2分配的sessionid存在相同,
HttpSession session = request.getSession(true);
则AA登录时将不会为AA创建新的session,而是直接将BB或CC的session给了AA,
那么AA就获取到了BB或CC的信息
分析存在疑问:web1和web2在sessionid上是共享的吗?


------解决方案--------------------
探讨
我看是struts2的配置导致的这个问题。。。
你在spring中action的bean果断加上scope="prototype" ,这样的话会让该类型的对象每次被请求时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。

------解决方案--------------------
struts2+hibernate+spring

项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"所以每次添加时都显示最后一次访问过的记录。

如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。