问题描述:
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上是共享的吗?

解决方案 »

  1.   

    楼主用的是什么开发的?struts1?struts2?hibernate?spring?
      

  2.   

    你能够发一段spring管理struts2中action的配置吗?
      

  3.   

    <interceptor name="autowiring"
    class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor" />
      

  4.   

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

  5.   

    登录调用的是servlet
    <servlet>
            <servlet-name>StreamLoginServlet</servlet-name>
            <servlet-class>com.authority.servlet.StreamLoginServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>StreamLoginServlet</servlet-name>
            <url-pattern>/login</url-pattern>
        </servlet-mapping>
      

  6.   


    我有点觉得是web部署在web1和web2造成的
      

  7.   

    涉及到并发的时候。。楼主我的建议是用ThreadLocal
      

  8.   

    不是部署导致的,是session管理的问题
      

  9.   


    多例就行了  和并发没关系!如果给spring管理 就用prototype
      

  10.   

    struts2好像不是单例的吧,struts1才是单例模式。所以struts2中好像不存在多线程共享的这个问题吧
      

  11.   

    用ThreadLocal来管理session上面跟你说过了,你当我白天说,算了。还是当我放P吧。楼下继续...
      

  12.   

    struts2+hibernate+spring项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"所以每次添加时都显示最后一次访问过的记录。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。