使用SSH框架做了一个系统,当多个用户同时登陆操作时数据会变得混乱,例如A用户进到第一个模块将显示的信息翻到第八页.这时候B用户在另外一台电脑上登陆进到第一个模块,这时候显示的就是第八页.找了很多网站,起初用了ThreadLocal去创建session但是还是不行~~麻烦哪位高手帮忙解决下,hibernate要怎么样管理session才能让多个用户都有自己的进程.

解决方案 »

  1.   

    很关注  帮你顶一下 感觉问题不是出在session  
      

  2.   

    翻页。。跟session有啥关系?让页数随着request一起走。
      

  3.   

    楼主理解问题有点乱了把,每个用户登录系统,系统都会主动给开启一个线程,每个用户在服务器端都有一个session对客户端对应。出现同时翻转到第八个页得问题,建议楼主贴点关键代码出来看看。
      

  4.   

    这应该不是Hibernate中的session问题,楼主应该检查一下你的其它方面的代码。
      

  5.   

    如果是用hibernateDaosupper 的话那么会自动对session进行干礼
      

  6.   

       翻页只是打一个比方,例如说先登录一个用户,再登录一个用户,后登录的用户操作一下,先登录的用户所有action里面的变量的值都被后登录的用户覆盖掉了
      

  7.   

          翻页只是打一个比方,例如说先登录一个用户,再登录一个用户,后登录的用户操作一下,先登录的用户所有action里面的变量的值都被后登录的用户覆盖掉了,甚至存在session里面的用户名都变成后登录那个用户的用户名了,我也想贴代码,但是这是整个系统的问题.不知道贴哪里的.
      

  8.   


     我是用这个获取session的
      /**
       * 初始化hibernate配置 
       */
      static {
      try {
      // Create the SessionFactory
      sessionFactory = new
      Configuration().configure().buildSessionFactory();
      } catch (HibernateException ex) {
      throw new RuntimeException(
      "Configuration problem: " + ex.getMessage(),
      ex
      );
      }
      }
      public static final ThreadLocal session = new ThreadLocal();
        /** 
         * 根据当前线程获取相应的Session 
         * @return Session 
         * @throws HibernateException 
         */  
      public static Session currentSession() throws HibernateException
      {
      Session s = (Session) session.get();
      // Open a new Session, if this Thread has none yet
      if (s == null) {
      s = sessionFactory.openSession();
      session.set(s);
      }
       return s;
      }
      public static void closeSession() throws HibernateException {
      Session s = (Session) session.get();
      session.set(null);
      if (s != null)
      s.close(); 
      }
      

  9.   

    我觉得你这个应该不是hibernate的问题,而是你页面参数的保存的问题。
      

  10.   

    是不是与spring中默认是单粒模式有关呢?
    上次看到网上有人出现这样的问题:用户注销以后,再一次登陆就不行了 必须重启才行
    后来解决方案是scope="prototype"  但我不知道要把哪些bean的作用范围改掉才行
    我也出现后登陆用户名为 bill的用户把前面放到session中 lucy 的用户覆盖掉
    纠结!!!!!!!!!!!!!
      

  11.   

    对于16楼说的这种情况我也遇到过,我用的是IE8 我从左面快捷方式打开的几个窗口,登录不同的用户,也都是后面的用户信息会覆盖掉保存在session前面登录的用户信息,我搞了半天也百思不得其解 
    按道理说每次打开一个新的页面都是一个新的IE进程应该都有自己的session
    但是IE8和IE8以前的不一样 ,IE8中,所有打开的IE窗口(IE 进程)共享一个session。除非,用户通过菜单 文件-->新建会话,来打开新窗口,或者使用命令行参数 iexplore.exe -nomerge 来打开IE。
    这就是说如果你想要重新登录你可以通过文件--->新建会话来打开新的窗口,这样就会是不同的session了当然也可以解决IE8带来的测试麻烦:在IE8的快捷方式的目标栏中添加-nomerge,再打开IE时就不会共享同一个session了。
      

  12.   

    我出现过和你相同的问题 :解决办法是换一种方式得到session  先得到HttpRequest request
    然后在得到session  不要用ActionContext来得到