最近搞struts2,有一个session问题
就是我们一般 都是下面这种方式存入session
# public class SessionTest1Action extends ActionSupport implements SessionAware {   
#   
#     private Map session;   
#   
#     public void setSession(Map session) {   
#   
#        this.session = session;   
#   
#   
#     }   
#   
#     public String execute() {   
#   
#        this.session.put("USER_NAME", user);   //当前登录的user对象
#   
#        return SUCCESS;   
#   
#     }   
#   
# } 
this.session.put("USER_NAME", user);   //当前登录的user对象key 是一个 固定值,那退出登录时候 会remove掉这个map但是 map的key都是一样的,难道不同用户登录 不会把 前面一个的用户的session 覆盖吗?
但是大家都这么用,我比较疑惑谢谢 了 请了解的人回答

解决方案 »

  1.   

    没写equals方法,是不会覆盖的
      

  2.   

    你的key 都是string类型啊 怎么不会覆盖呢?
      

  3.   

    不会覆盖。struts2是多实例的,也就是每一个用户进来,都创建一个新的session,不同的session引用,当然也就不会覆盖了
      

  4.   

    但是 这个 session被存在一个map中 ,他们的是key是相同的啊难道 session底层不是这么存储的?
      

  5.   

    LZ肯定是没有理解session 的概念吧,session是一种服务器运行会话机制,如果用户访问服务器,服务器就会先检查这个客户端的请求里是否已包含了一个session标识(即 session id),如果包含此会话标识说明就已经为该用户创建过session id ,如果没有就创建呗。session 一般会有一个失效时间的,一旦超过这个时间就会失效,这个失效时间一般默认是30分钟,也可以自己设置。我忘了怎么看session id 标识了,好像是url;jsessionid=xxxxxxxxxxx ,应该可以看到的,我忘了是不是把from中的method="get",你可以测试一下就明白了。祝你好运
      

  6.   

    strut2
    封装了 底层 session 我知道 
    但是我还是不明白 为什么这样不会封盖呢?
      

  7.   


       对!   当不同用户打开一个新会话的时候,首先创建的session就是不同的。所以根本没有关系。
      

  8.   

    那你清除 session时 怎么去 清除当前用户的session呢?
    不会把别人的session也清楚了么?
      

  9.   


    strut2 其实是封装了session
    我的回答不是很明白了吗
    用户访问服务器时,要判断session标识的 sessionid 的,如果remove session 其实就是remove sessionid 
    所以就不会引起覆盖问题了,这就是session 会话机制的好处了,但是session也不是什么时候都有,那样用就会增加服务器负担的
      

  10.   

    每个session都有一个sessionid,而且都是不一样的,服务器就是根据sessionid来判断是否是同一个用户