此时在服务器(医院)这边就需要记录"令牌"信息, 以及令牌对应的用户信息, 这个就是 Session 机制所做的工作.
会话也是对话的意思.
在计算机领域, 会话是一个客户与服务器之间的不中断的请求响应. 对客户的每个请求,服务器能够识别出请求来自于同一个客户. 当一个未知的客户向Web应用程序发送第一个请求时就开始了一个会话. 当客户明确结束会话或服务器在一个时限内没有接受到客户的任何请求时,会话就结束了.
服务器同⼀时刻收到的请求是很多的. 服务器需要清楚的区分每个请求是从属于哪个用户, 也就是属于哪个会话, 就需要在服务器这边记录每个会话以及与用户的信息的对应关系.Session是服务器为了保存用户信息而创建的一个特殊的对象.
注:
Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失.
@RequestMapping("/getCookie1")
public String getCookie(HttpServletRequest request, HttpServletResponse response) {
//获取参数
//String name = request.getParameter("name");
Cookie[] cookies = request.getCookies();
if (cookies != null) {
Arrays.stream(cookies).forEach(cookie -> {
System.out.println(cookie.getName()+":"+cookie.getValue());
});
}
return "获取cookie成功";
}
@RequestMapping("/getCookie2")
public String getCookie2(@CookieValue("bite") String result){
return "获取到cookie值了,value:"+result;
}
@RequestMapping("/setSession")
public String setSession(HttpServletRequest request, HttpServletResponse response) {
//先从cookie中获取到sessionId,再根据sessionId获取session对象,如果没有获取到,就会自己创建一个session对象
HttpSession session = request.getSession();
session.setAttribute("name","zhangsan");
return "Session设置成功~~";
}
这个代码中看不到 SessionId 这样的概念的. getSession 操作内部提取到请求中的Cookie 里的SessionId, 然后根据SessionId获取到对应的Session 对象, Session 对象用HttpSession来描述
@RequestMapping("/getSession1")
public String getSession1(HttpServletRequest request, HttpServletResponse response) {
//先从cookie中获取到sessionId,再根据sessionId获取session对象
HttpSession session = request.getSession();
String name = (String)session.getAttribute("name");
return "获取到session的值了 name:"+name;
}
@RequestMapping("/getSession2")
public String getSession2(HttpSession session, HttpServletResponse response) {
String name = (String)session.getAttribute("name");
return "获取到session的值了 name:"+name;
}
@RequestMapping("/getSession3")
public String getSession3(@SessionAttribute("name") String name) {
//String name = (String)session.getAttribute("name");
return "获取到session的值了 name:"+name;
}