cookie和session的简单使用
前言
Http是无状态的协议,http的每一次请求都是独立的,本次请求不能访问到上一次请求的记录状态,http结合cookie和session可以保存和记录会话的状态。
关于Cookie
-
介绍:Cookie分为内存Cookie和磁盘Cookie,内存Cookie由浏览器维护,浏览器关闭就清除了,存在时间很短;磁盘Cookie存储在本地磁盘中,详情图1-1。磁盘coolie,有一个过期时间,可以手动设置,默认为-1,浏览器关闭就清除。可以设置长期时间来持久保存。所以,按存在时间,可分为持久Cookie和非持久Cookie。
图1-1
-
使用案例
创建springboot项目,接口代码为
@RequestMapping("/setCookie")
public String setCookie(HttpServletResponse response, String cookieName, String cookieValue) {
Cookie cookie = new Cookie(cookieName, cookieValue);
response.addCookie(cookie);
return "cookieName=" + cookieName + ",cookieValue=" + cookieValue;
}
@RequestMapping("/getCookie")
public Object getCookie(HttpServletRequest request) {
return request.getCookies();
}
运行项目,可以在chrome浏览器cookie缓存中看到cookie值
本地的cookie中加密了,但是也可以找到localhost abc字符串,说明改文件中也存储了该cookie值。现在关闭浏览器,重新打开,缓存和文件中都找不到了,说明cookie已被清除。设置超时时间30*30*3600
,关闭浏览器,再次打开,cookie依然存在于磁盘文件中,说明cookie被持久保存了。
我们还可以在js中修改cookie,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
修改添加Cookie值 name=sfdsafasf
<script>
document.cookie="name=sfdsafasf";
</script>
</body>
</html>
加载html页面,可以看到name=sfdsafasf已经添加成功。
关于Session
- 介绍:一次请求就是一次会话,session称为会话信息,位于WEB服务器上。可以使用session存储用户的登录信息,服务器会为每一个用户生成唯一sessionid。session的生命周期归服务器掌管,服务器会把长时间没有活动的session移除,在Tomcat中,这个时间为30分钟。我们也可以手动调用
session.invalid()
手动设置失效。 - 使用案例:
@RequestMapping("login")
@ResponseBody
public String login(HttpServletRequest request) {
HttpSession session = request.getSession();
if (session.isNew()) {
session.setAttribute("isNew", true);
} else {
session.setAttribute("isNew", false);
}
return "是否新用户:" + session.getAttribute("isNew") + ",id=" + session.getId()+",保存时间"+session.getMaxInactiveInterval()+"s";
}
在浏览器中访问,可以看到返回值和浏览器本地的JSESSIONID相等,说明服务器创建seesion后调用过HttpServletResponset的addCookie方法将JSESSIONID加入到了Cookie中。我们刷新页面,发现session没有重新创建,说明服务器拿到请求端cookie中JSESSIONID后,自动匹配到该会话之前创建的session并返回。