什么是Session会话
- Session 就一个接口(HttpSession)。
- Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
- 每个客户端都有自己的一个 Session 会话。
- Session 会话中,我们经常用来保存用户登录之后的信息。
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。
- Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
- 当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
- Session 对象最常见的一个用法就是存储用户的首选项。
session对象主要是存在服务器端,用于保存服务器的临时数据的对象,所保存的数据可以在整个项目中都可以通过访问来获取,把session的数据看做一个共享的数据。首次登录的时候所获取到的数据,转移到session对象即可。session.getAttrbute(“key”)可以将获取session中的数据这种行为进行封装,封装在BaseController类中。
1、封装session对象中数据的获取(封装在父类中)、数据的设置(当用户登陆成功后进行数据的设置,设置到全局的session对象)
2、在父类中封装两个数据:获取uid和username。头像暂时不考虑,将来封装在cookie中使用
/**
* 获取sessiopn对象中的uid
* @param session session对象
* @return 当前登录的用户的uid的值
*/
protected final Integer getuidFromSession(HttpSession session){
return Integer.valueOf(session.getAttribute("uid").toString());
}
/**
* 获取当前用户的username
* @param session session对象
* @return 当前登录用户的用户名
*/
protected final String getUsernameFromSession(HttpSession session){
return session.getAttribute("username").toString();
}
3、在登录方法中将对象数据封装在session对象中。
服务器本身自动创建有session对象,已经是一个全局的session对象
Springboot直接使用session对象,直接将HTTPSession类型的对象作为请求处理方法的参数,会自动将全局的session对象注入到请求处理方法 的session形参上
@RequestMapping("login")
public JsonResult<User> login(String username, String password, HttpSession session){
User data = userService.login(username, password);
//向session对象中完成数据的绑定(全局的)
session.setAttribute("uid", data.getUid());
session.setAttribute("username", data.getUsername());
//获取session中绑定的数据
System.out.println(getuidFromSession(session));
System.out.println(getUsernameFromSession(session));
return new JsonResult<>(ok,data);
}