今天在使用到注销操作时,发现session的invalidate() 方法还有一些注意点。
@GetMapping("/user/logout")
public String logout(HttpSession session){
session.invalidate();
return "redirect:/index";
}
注意点:
1.调用invalidate() 方法会使该Session无效,但无效只是不能调用setAttribute或者getAttribute之类的方法了,Session对象还存在!此时,如果再执行setAttribute或者getAttribute方法会抛出IllegalStateException;
2.调用invalidate() 方法会将该Session绑定的对象全部解绑,因此如果调用request.getSession(false)方法,返回值会是null。因为此时request没有绑定任何Session;
3.getSession()默认参数是true,如果调用invalidate() 方法后执行request.getSession(),那么此时会创建一个新的Session给该Request对象绑定;这时,如果你再次执行request.getSession(false)方法,返回的就不是null了,而是上面新创建的Session对象。
本文探讨了在Java中使用HttpSession的invalidate()方法进行用户注销时应注意的三个关键点:Session失效、对象解绑及新Session创建。理解这些细节有助于避免潜在问题并正确管理会话状态。

1072

被折叠的 条评论
为什么被折叠?



