HTTP无状态的、有会话的
在同一个连接中,两个执行成功的请求之间是没有关系的,可以使用Cookies创建有状态的会话。是服务器发送到用户浏览器并保存在本地的一小块数据,可以让服务器记住浏览器
Cookie存在浏览器中(不安全,只能存字符串小型数据)
Session存在服务器(安全,但增加服务器端的内存压力)
// cookie示例
@RequestMapping(path = "/cookie/set", method = RequestMethod.GET)
@ResponseBody
public String setCookie(HttpServletResponse response) {
// 创建cookie
Cookie cookie = new Cookie("code", CommunityUtil.generateUUID());
// 设置cookie生效的范围
cookie.setPath("/community/alpha");
// 设置cookie的生存时间
cookie.setMaxAge(60 * 10);
// 发送cookie
response.addCookie(cookie);
return "set cookie";
}
@RequestMapping(path = "/cookie/get", method = RequestMethod.GET)
@ResponseBody
public String getCookie(@CookieValue("code") String code) {
System.out.println(code);
return "get cookie";
}
// session示例
@RequestMapping(path = "/session/set", method = RequestMethod.GET)
@ResponseBody
public String setSession(HttpSession session) {
session.setAttribute("id", 1);
session.setAttribute("name", "Test");
return "set session";
}
@RequestMapping(path = "/session/get", method = RequestMethod.GET)
@ResponseBody
public String getSession(HttpSession session) {
System.out.println(session.getAttribute("id"));
System.out.println(session.getAttribute("name"));
return "get session";
}
}
Session原理 ,依赖于Cookie
黏性Session(不均衡)
同步Session(对服务器性能产生影响,服务器之间耦合高)
共享Session(设置一台独立服务器存Session,对这个服务器依赖性过高)
如今使用数据库存Session(Redis)