1、java的seesion的机制是这样的。当浏览器第一次访问服务器,你会问服务器是怎么知道我第一次访问的,先不管。
2、用户在浏览器第一次发起请求,java不管三七二十一先创建一个内存,同时生成一个session指向这个内存,同时又生成一个sessionid指向这个session。所以是 sessionid -> session -> 内存,这是java帮我们做的。
3、当请求响应给前端数据时,java会自动的将sessionid传给浏览器,浏览器自动把这个sessionid存起来。每当发起另外的请求时,浏览器都会把这个sessionid传给后端java,java利用这个sessionid找到session,那么我们就可以通过session找到这个内存。
4、所以我们知道有个内存这样的东西,我们可以利用它存东西。
5、所以浏览器怎么判断是不是第一次请求,就看浏览器访问java后端是是否传sessionid。
登录:前端传账号密码过来,验证一下都正确,那好,我们把这个数据存到这个内存里面,java提供了session我们可以直接访问这个内存。代码如下,然后正常返回我们的数据, 这个sessionid我们不用管,java会自动帮助我们在header传给前端。
@RequestMapping(value = "login.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse login(String username, String password, HttpSession session){
ServerResponse response = iUserService.login(username,password);
if(response.isSuccess()){
session.setAttribute("user",response);
}
return response;
}
当用户请求其他接口,浏览器自动携带sessionid传给后端,后端通过sessionid拿到session,也是通过session操作这个内存,下面我是移除了这个信息。
@RequestMapping(value = "logout.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse logout(HttpSession session){
session.removeAttribute("user");
return ServerResponse.createBySuccess();
}