`
chunfengxixi
  • 浏览: 41356 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

奇怪的session混乱问题

阅读更多
   服务器:jboss4.2
   问题:偶尔两个帐号在两台不同的机器上,a帐户获取了b帐号的session值
  
public ActionForward loadDialogList4Inbox(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response)throws Exception{
        MailService service = (MailService)this.getBean("mailService");
        List labels = (List)request.getSession().getAttribute("labels");
        if(labels == null){
            labels = service.loadLabelWithTotal(this.getUserId());
            request.getSession().setAttribute("labels",labels);
        }
        return mapping.findForward("dialogList");
  }
分享到:
评论
11 楼 iceskysl 2007-10-02  
抛出异常的爱 写道
刚刚在
技能云http://www.itechtag.com/about
遇到了。。。
用的是温柔一刀的账号。。。。。


这个问题,我查看了下代码,确实存在一个疏忽,原来是这样的:
# def get_current_user  
#   if session[:user].nil?  
#     if cookies[:p_session_id] && p = PersistentLogin.find_by_uid(cookies[:p_session_id])  
#       session[:user] = c_user.id  
#     end  
#   end  
# end 


这里的session[:user] = c_user.id  这句是错误的,取错字段了,应该是取该表的user_id字段的,一时疏忽,多谢提醒,为此专门写了一篇文章分析。
http://blog.1sters.com/?action=show&id=38
10 楼 fyting 2007-09-27  
...牛,以前我们项目里也有这种代码,上线后才发现,图省事直接改成ThreadLocal吧
9 楼 chunfengxixi 2007-09-27  
public class BaseMappingDispatchAction extends MappingDispatchAction {

            private static Logger logger;
            protected int userId, orgId;
            protected String userAccount, userName, orgName;
            protected final Log log = LogFactory.getLog(getClass());
            private static ApplicationContext ctx = null;

            public BaseMappingDispatchAction() {
            }
}
这是基类,问题就是它定义的是实例变量而不是局部变量,并发访问时我获取了错误的用户id,于是获取了错误的值放在session中了,而不是session混乱了
8 楼 dennis_zane 2007-09-27  
服务器不可能出问题的,肯定是代码问题,将session作为实例变量了。
7 楼 chunfengxixi 2007-09-27  
问题就是这里了,action的基类居然是把该值int userId=this.getUserId()作实例变量保存.狂晕!
6 楼 chunfengxixi 2007-09-27  
这是公司的基类中直接获取登录用户的id
this.getUserId()
5 楼 fyting 2007-09-27  
从代码里没看出问题来,你的Web应用部署方式是怎样的,我以前遇到过取不到session值的问题,是因为把tomcat里的context和host的appBase指向了同一个目录,结果实质上产生了两个Web应用。
一般这种奇怪的问题不太可能是服务器出错,很可能是哪儿犯低级错误了,只有自己一步步检查。

this.getUserId());   

晕,没仔细看,这句是什么?
4 楼 chunfengxixi 2007-09-26  
咋没人出来解个惑啊?自己顶
3 楼 baibai326 2007-09-26  
楼上的,莫非这是传说中的request 混乱了?

session也能混乱就太恐怖了。

我没有遇到过,只是猜测下。根据原理,sessionID  理论上是唯一的,也许多线程等原因让这个理论不成立了?
2 楼 chunfengxixi 2007-09-26  
自己顶一下,楼上的看起来不是在回复本贴,并且在列表页面统计本帖回复数为0(不计本回复),第一次发贴就bug,呵呵
1 楼 抛出异常的爱 2007-09-26  
刚刚在
技能云http://www.itechtag.com/about
遇到了。。。
用的是温柔一刀的账号。。。。。

相关推荐

Global site tag (gtag.js) - Google Analytics