/** * cookie 示例 */ @RequestMapping(path = "/cookie/set", method = RequestMethod.GET) @ResponseBody public String setCookie(HttpServletResponse response){ //创建cookie,将cookies存到Response对象中。 Cookie cookie = new Cookie("code", CommunityUtil.generateUUID()); //设置生效的范围,明确声明cookies在那些路径下有效。节省网络资源 cookie.setPath("/community/alpha"); //在这个路径已经子路径下有用。 //设置生存时间(存在硬盘中,长期有效)。默认情况存在内存中,浏览器关闭消失。 cookie.setMaxAge(60 *10); //60s*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"; }
通过以上,可以看到Cookie第一次访问时在response的header中给出
不在范围路径下的没有code,
对于浏览器访问服务器在服务器端,创建一个Session。因为有多个浏览器,因此Session也有多个。如何将Session与浏览器一一对应,就用到了Cookie。因此Session本质上式依赖于cookie的。
在响应时,服务器自动向浏览器发送数据,通过cookie携带(服务器底层自动建立cookie,在cookie中存SessionId)。浏览器存cookie,下次请求时会发送给服务器,服务器通过sessionId找到对应的session。
/** * Session 示例 */ @RequestMapping(path = "/session/set", method = RequestMethod.GET) @ResponseBody public String setSession(HttpSession session){ //Session 不需要手动创建,SpringMVC 会自动创建并注入。 //类似于 Request,Respond, Model //因为Session是一直存在于服务端的,因此可以存任何类型的数据。Cookie只能字符串少量数据。因为需要来回传,影响性能。 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"; }
注意:这里只在第一次访问的时候显示。重复访问不会显示了就。
因此将数据存到Redis中较好。即尽量不存Session,能存Cookie存Cookie。对于敏感数据存到Redis。
原文:https://www.cnblogs.com/codinghard/p/14829032.html