今天在使用到注销操作时,发现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对象。