session的含义找度娘,这里说说常用的用法
1) 用于登录:
在登录时设置session;
@RequestMapping("/dologin")
@ResponseBody
public String dologin(HttpServletRequest request, String username, String password){
request.getSession().setAttribute("username", username);
return "true";
}
在拦截器中获取session:
String userId = (String)request.getSession().getAttribute("username");
if (userId != null){
return true;
}else{
response.sendRedirect(request.getContextPath()+"/user/login");
}
return false;
在同一个浏览器下访问,如果没有登录过则会获取不到session,跳转到登录页面。如果登录过,则不受影响。
注:上面的代码只是个小例子,没有区分用户。完善一点的做法是登录时创建一个guid写入session,使用map将guid和用户信息存起来,拦截器中获取session中的guid,从而获取用户信息再进行业务判断。
2) 用于传参:
设置session后可以在页面中直接获取。如上面登录时设置了username属性。在页面中可直接获取:
<p>
session:username----${username}
</p>
只要登录过(request调用过session的setAttribute方法)。
在其他任何页面都可以通过${username}获取session中的值。
3) 用于注销:
清空session中的所有信息:
@RequestMapping("/loginout")
public String loginout(HttpServletRequest request){
// 清除session 的所有属性
//request.getSession().invalidate();
// 清除单个session 的属性值
request.getSession().removeValue("username");
// 清除单个session 的属性
//request.getSession().removeAttribute("username");
return "user/login";
}
上面的三种清除方式都可以达到注销的目的,清除属性的值最符合业务场景。
访问:http://localhost:8080/springMVC3/user/loginout后,当前页面跳到登录页面。
其他页面也无法访问,因为拦截器中已获取不到session中的内容,跳到登录页面。