SpringMVC中删除session的小问题

springmvc中使用@SessionAttributes后删除session失效的问题


一、背景

继上篇文章使用@SessionAttributes后,获取相应的session的问题解决后,在项目中出现了登出删除session的需求,我使用了sessionStatus.setComplete();,这样做目的是清除该条记录,因为要删除@SessionAttributes中的session值,必须采用上述代码进行删除,但是很遗憾,我还是没有完全理解springmvc中的session,因为springmvc实现session的模块有很多。


二、解决方案

尽管我是用sessionStatus.setComplete();,删除了@SessionAttributes中的session之后,在HttpSession中还是有session存在的,并没有删除HttpSession中的session,这就会导致我在jsp页面中使用EL表达式,仍然能获取session中的值,因此我必须彻底删除所有的session。


三:代码:

1
2
3
4
5
6
7
8
@RequestMapping(value = "/login_out")
public String login_out(HttpSession session, SessionStatus sessionStatus){
session.removeAttribute("resident"); // remove session from HttpSession
session.invalidate(); // make HttpSession invalidate
sessionStatus.setComplete(); // clear all information in current session
return "login";
}

说明:

session.removeAttribute("resident"); 用来移除HttpSession中的相应session键值。

session.invalidate(); 用来使HttpSession失效。

sessionStatus.setComplete();最后执行,删除@SessionAttributes提供的session。

这样就可以彻底删除session了,在jsp中也获取不到相应的session值。


参考博客:

https://blog.csdn.net/s740556472/article/details/71275328?utm_source=blogxgwz9