问题是这样的:
我们公司在做一个web系统,这几天在集中测试,测出了问题!
我们的系统中,有一个 SessionParameter 类,在每一个用户成功登陆后,为其实例化一个该类的对象,用于存放该类的信息。包括:userId  ,  userNmae  ,,,等属性。
然后把这个对象存在session范围内。
session.setAttribute("sessionParameter", sessionParameter);
在把sessionParameter保存到session 的同时,
我还把userid在application保存了,用于判断,一个用户在同一时间,只能登陆一次。除非前一次登陆注销,否则该用户不能在其他地方登陆。等用户成功登陆以后,在页面的左下脚显示用户的信息,包括用户名,登陆时间等。
这样显示:
<% SessionParameter  sessPara=(SessionParameter)session.getAttribut
("sessionParameter");%> 。。
<td width="77%" class="menu_list">用户:<%=sessPara.getUseName()%> </td>
在注销登陆的时候,我先从applicaion中把这个userid   remove掉,然后再使当前session失效。
---------------
然后就存在这样的问题,
当很多用户同时登陆,且操作系统的时候,页面左下脚的用户名字,就变成了其他登陆的用户的名字。
比如:我的登陆 userid:11111     username:aaaaa
其他人的登陆: userid:22222     username:bbbbb
                ..........................我的页面左下脚的用户名字应该是:aaaaa
但是我的名字在操作的过程中,有可能边成其他的人的名字:比如:bbbbb,或者,ccccc但是这种变化,是偶然发生的,也就是说,程序基本上都可以正常运行,显示正常,
但是在偶然情况下,可能发生如上的变化。
(这中情况一般发生在多个不同用户同时操作的情况下。)
---------------------
所以,我就想,如果是程序写的有问题,那么在一开始就会出现问题,
但是现在的问题是,谁都不知道什么时候出现问题,会变成谁的名字。因为我的userid,username 是保存在 sessionParameter中的,而sessionParameter是保存在
session中的,
所以我就怀疑,是不是session发生了混乱。
是不是tomcat4.0对 session 的管理存在bug,当多个用户同时访问的时候,session的管理就出现混乱。如果不是,这个问题,那么会是什么问题,请大家说出自己的看法!----------------
最后,请斑竹将帖子置顶。以便大家都能够对这个问题,谈谈自己的看法!

解决方案 »

  1.   

    你换个其他版本试试啊,不行就换websphere,sun one这些东东试试,如果都这样,8成是你程序有问题。
      

  2.   

    struts的action是现程不安全的,struts的action是现程不安全的
    只要加synchronized 这个关键字就可以了servlet 是线程安全的 我的登陆 全部是用的servlet
      

  3.   

    我觉得很可能使application和session之间的某些逻辑混乱造成的。
    另外,最好贴出你得session监听器的代码看看。
      

  4.   

    tomcat的session管理存在问题这个可能性不大。关键是你把变量放在session里,如果别的用户登陆后如果能改动你的属性就肯定会出现问题。如果你的application里改动影响了session,我是指两个实例的内存地址相同,不小心改了一个,另一个受到影响也未可知。
      

  5.   

    我有个同事前两天,一个程序老出现段错误,又找不到原因,就成天怀疑gcc有问题,编译出来的程序不对,最后还是发现自己程序中有悬空的指针.呵呵.
      

  6.   

    我用WEBSPHERE时,也有类似的问题。觉得特怪。
      

  7.   

    多半 线程安全问题 而不是  Bug  , 同步操作。而且还要能处理 Session 超时问题 , 所以用 HttpSessionListener 比较好。在 
    HttpSessionListener.sessionDestroyed  方法中做 清理.
    HttpSessionListener.sessionCreated 做重置.
      

  8.   

    回复人: longrenrex(菜菜龙) ( ) 信誉:100  2005-09-03 17:59:00  得分: 0  
     
     
       struts的action是现程不安全的,struts的action是现程不安全的
    只要加synchronized 这个关键字就可以了servlet 是线程安全的 我的登陆 全部是用的servlet
      
     
    ------------------------------
    就是这个原因!
    现在问题解决了!
    谢谢大家,谢谢所有的人!