关于监听器中session的问题

时间:2022-10-24 22:38:24
servlet里写有:
int user.id=1;
session.setAttribute("loginUser", user.id);

创建一个HttpSessionListener,监听session创建,写有
public void sessionCreated(HttpSessionEvent event) {
       
  HttpSession session = event.getSession();
  
  String user_id = (String) session.getAttribute("loginUser");

  System.out.println(session.getId());
  System.out.println(session.getAttribute("loginUser"));
}

为什么第一个有值,而且和servlet里的session.getId()一样,但是第二句就是null?

不想向session中直接存对象,因为只用到一个值,哪种监听器好用?HttpSessionAttributeListener是实现了的,但是是放入的整个对象,换成值就不行了。求教,急啊

5 个解决方案

#1


是说放个对象可以吗?呵呵,那就把int换成Integer。

#2


session.getId() 是获取的sessionId,是内存中这个session的id
session.getAttribute("loginUser") 这个取得是session中保存的对象值。session创建时,是先到listener里的sessionCreated方法,然后才到servlet的,所以你是先取值(为null),再在servlet里赋值的

#3


为什么第一个有值,而且和servlet里的session.getId()一样,但是第二句就是null?
第一个的值是session创建时容器给他的 不是你赋值的
第二个没值 是不是你就没把这个对象放在session中?
session.setAttribute("loginUser",  user.id); 后面这个参数是object类型

#4


 第2个
这样就可以System.out.println((String)session.getAttribute("loginUser"));
返回类型需要转换

#5


引用 3 楼 zn85600301 的回复:
为什么第一个有值,而且和servlet里的session.getId()一样,但是第二句就是null?
第一个的值是session创建时容器给他的 不是你赋值的
第二个没值 是不是你就没把这个对象放在session中?
session.setAttribute("loginUser", user.id); 后面这个参数是object类型

转换成你要的类型

#1


是说放个对象可以吗?呵呵,那就把int换成Integer。

#2


session.getId() 是获取的sessionId,是内存中这个session的id
session.getAttribute("loginUser") 这个取得是session中保存的对象值。session创建时,是先到listener里的sessionCreated方法,然后才到servlet的,所以你是先取值(为null),再在servlet里赋值的

#3


为什么第一个有值,而且和servlet里的session.getId()一样,但是第二句就是null?
第一个的值是session创建时容器给他的 不是你赋值的
第二个没值 是不是你就没把这个对象放在session中?
session.setAttribute("loginUser",  user.id); 后面这个参数是object类型

#4


 第2个
这样就可以System.out.println((String)session.getAttribute("loginUser"));
返回类型需要转换

#5


引用 3 楼 zn85600301 的回复:
为什么第一个有值,而且和servlet里的session.getId()一样,但是第二句就是null?
第一个的值是session创建时容器给他的 不是你赋值的
第二个没值 是不是你就没把这个对象放在session中?
session.setAttribute("loginUser", user.id); 后面这个参数是object类型

转换成你要的类型