最近在写框架的时候,采用SSO(单点登录),同时需要使用no session的方式来提高性能。其实就是在所有请求之前把session状态设为失效,这样的话在大用户量的情况下可以减少请求的开支。
上面都是题外话:
先看一段对比代码
HttpServletRequest hsr = (HttpServletRequest) request;
hsr.getSession().invalidate();
System.out.println(hsr.getSession().getId());
chain.doFilter(request, response);
HttpServletRequest hsr = (HttpServletRequest) request;
System.out.println(hsr.getSession().getId());
chain.doFilter(request, response);
7BD84B685916DDFBB602188B6B7B8EBA
7DC83FB878955750330CFCB809D5BFF3
69DF72DC4DBFBAAFFEFACE8AA21C084B
9FB9E9715D27946BEBDDF2D0E4D09860
FD7D4FD3224A7AB3DE5887D7F72EB753
4AEDE9F9739CEC6FB0869B9269B74441
4AEDE9F9739CEC6FB0869B9269B74441
4AEDE9F9739CEC6FB0869B9269B74441
4AEDE9F9739CEC6FB0869B9269B74441
4AEDE9F9739CEC6FB0869B9269B74441
分别是以上两个代码的结果。从结果可以很清楚的看到,第一种情况的session状态被销毁了,所以每次的请求session的id都是不一样的。
代码和结果很简单
PS:
session.invalidate()是让当前浏览器的session销毁,也就是一个session被销毁,比如用户登录后注销就用这个,因为注销意味着该用户session中的所有属性均失效。而removeAttribute()可以指定销毁session中的某个属性