1、是什么?
- cookie存储在客户端的浏览器内存或者硬盘上;Session存储在服务端的内存中。
2、解决了什么问题?
- 解决http的无状态性;比如我想实现网上商城购物车功能,保存每个客户端用户登录信息的?七天记住密码功能;用户登录信息续签功能。
3、怎么用?
- 我大概给个流程图

4、代码实现
4.1、给客户端生成对应的Session,并返回Cookie到浏览器
@RequestMapping("/source")
@ResponseBody
public String sevenDaysLogin(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, String> map) {
System.out.println("-ppppppppppppppppppppp-p-p-p-p-");
String account = map.get("startDate");
String pwd = map.get("endDate");
String flag = map.get("planLanes");
System.out.println(map.get("startDate"));
System.out.println(map.get("endDate"));
System.out.println(map.get("planLanes"));
if (!("2022-01-25".equals(account) && "2022-01-28".equals(pwd))) {
System.out.println("密码错误");
return "error";
}
HttpSession session = request.getSession(true);
if ("[1]".equals(flag)) {
Cookie cookie = new Cookie("JSEESIONID", session.getId());
cookie.setMaxAge(60*60*24*7);
session.setMaxInactiveInterval(60*60*24*7);
session.setAttribute(session.getId(),"下次用户只需要带着没有失效的Cookie,在7天内就可以完成登录了。无需再次校验数据库中用户名密码信息。");
String id = session.getId();
System.out.println(cookie.getValue()+"......--------------服务端响应到客户端的cookie-id------------------...."+id);
response.addCookie(cookie);
} else {
request.getSession().setMaxInactiveInterval(180);
Cookie c = new Cookie("JSESSIONID", request.getSession().getId());
c.setMaxAge(-1);
response.addCookie(c);
}
session.setAttribute("username","startDate");
return "ok";
}

- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
4.2、通过客户端浏览器提交上来的cookie,找到对应的Session内容
- 判断是否有对应Session,Session是否失效。
@RequestMapping("/getLogin")
@ResponseBody
public String getLogin(HttpServletRequest request, HttpServletResponse response) {
System.out.println("-pppppppppppppppppppppppppppppppppppppppppp-------------------------");
Cookie[] cookies = request.getCookies();
HttpSession session = request.getSession(true);
Object[] objects = Arrays.stream(cookies).toArray();
for (int i = 0; i < cookies.length; i++) {
System.out.println(cookies[i].getName()+"...........客户端传上来的cookie........."+cookies[i].getValue());
System.out.println(cookies[i].getMaxAge()+"....................");
}
Object attribute = session.getAttribute(cookies[0].getValue());
System.out.println(attribute);
return "OK";
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 红线上面打印信息是服务器响应到客户端的SessionID。
- 下面是客户端携带的SessionID,在服务端Session中可以被找到。
