会话管理——Cookie
会话管理在人机交互中扮演着至关重要的角色,它是指保持用户的整个会话活动的互动与计算机系统跟踪过程。以下是对会话管理的简单介绍:
会话主要分为两类:有状态会话(知道对方身份)和无状态会话(不知道对方身份)
浏览器HTTP请求本身为无状态的
无状态会话只是接收到了四个请求 。而有状态会话接收四个请求并且可以区分发送请求的对象。
那么如何实现有状态的会话呢?
那么就需要会话管理中的cookie和session了
cookie:客户端技术,将状态保存在客户端
session: 服务端技术,将状态保存在服务端
具体过程
cookie:服务器创建的通过响应发送给客户端并保存在浏览器上的一小段信息,浏览器在下次向服务器发送请求时,这段信息被携带并发送到服务器上。如图所示:
cookie可以既可以在后端设置也可以在前端设置。
后端具体操作:现在我们建一个servlet,命名为SetServlet,在doGet函数中写入
//服务端创建cookie Cookie cookie=new Cookie("account", "admin");//Cookie cookie2=new Cookie("key", "qqqqq");//设置cookie有效期 单位为s//>0,表示有效期。=0,表示删除cookie。<0,表示会话cookiecookie.setMaxAge(60*60);//将cookie响应给客户端response.addCookie(cookie);
我们可以在网页中看到该cookie
前端具体操作:在HTML文件里,用javascript设置获取cookie:
document.cookie="变量名=变量值",这样
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>document.cookie="account=admin"
document.cookie="password=123456;"
document.cookie="key=value;max-age="+60*60</script>
</head>
<body></body>
</html>
要获取某一项获取cookie
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">function getCookie(key){var arr = document.cookie.split(";")//var arr = document.cookie.split("; ")也可以去空格for(var i=0;i<arr.length;i++){arr[i]=arr[i].trim() //去空格if(arr[i].indexOf(key)==0){return arr[i].substring((key.length+1))}}console.log(arr)return ""
}console.log(getCookie("password"))</script>
</head>
<body></body>
</html>
- split()将字符串分割为字符串数组
- trim()去掉字符串前后的空格
- indexOf() 判断有没有这个字符串,有返回匹配的第一个字符串的第一个位置。没有返回-1
- indexOf(string,n) 表示跳过n个元素后去查找这个字符串
- lastIndexOf() 判断有没有这个字符串,有返回匹配的最后一个的第一个位置。没有返回-1
- subString(a,b)从a到b字符串裁剪
cookie优缺点分析:
优点:
可以设置到期规则,cookie默认在过期之前一直保存在浏览器上
cookie包含简单的键值对
缺点:
大小受限制,一般是4kb 8kb
在同一个域名下cookie的总数量有限制
而且cookie可以设置禁用,在浏览器中
cookie有潜在的安全风险,因为cookie可以被篡改