第一部分.cookie和session
目标:跟踪会话产生原因:HTTP协议是无状态协议,在数据交换完成后连接就会断开,再次进行数据交换就会再次产生连接,举个例子,小明请求结算购物车的时候,从新产生连接服务器无法判断是谁发起的操作,而session和cookie就可以解决这个问题,相当于颁发了一个身份证明能证明你就是你而不是别人区别:
1.cookie存储于客户端,session存储于服务端
2.cookie保存的是字符串,session中保存的是对象
3.存储时间的不同补充
cookie可以携带用户的信息存储在浏览器中,如果发起请求的时候携带cookie,这样服务器就可以判断用户是谁,但显然携带数据是不安全的,当然cookie可以存储某些数据
session是比cookie更安全的方式,数据存储在服务器中,举个例子,本地存储的是你的身份证明的编号(sessionID),你的身份证明(session中存储的数据)在服务器中,想要查看你的身份证明的数据就要携带你的身份证明的编号,通常sessionID通过特殊的cookie的方式存储在浏览器中,当cookie无法使用的时候可能会携带在url中
一.cookie
cookie的创建流程图:
![](https://www.noah-dream.com/usr/uploads/2020/08/1561420820.png)
cookie的工作原理:
1.浏览器向服务器端请求数据
2.服务器创建cookie,这个cookie中携带用户的信息,然后将这个cookie返回到浏览器,最终以小块文本的方式存储在计算机本地
3.再次发起请求的时候携带浏览器存储cookie,服务器根据cookie中携带的数据来区分不同的用户
cookie应用场景:
网站勾选记住用户名密码
网站的个性设置
历史记录
二.session
session的创建流程图:
默认考虑不禁用cookie的情况
![](https://www.noah-dream.com/usr/uploads/2020/08/2355650285.png)
session的工作原理:
1.浏览器向服务器发送请求
2.服务器创建session,并且返回一个cookie到浏览器,这个cookie中携带JSESSIONID里面有这个session的ID
3.再次发起请求,携带session的id,服务器获取到session中的对象
session应用场景:
验证登陆信息
判断用户权限
第二部分.cookie,session与token
一.为什么产生token
1.单纯cookie的话本地存储大,不安全
2.session存储的话发起请求存储信息,对服务器内存要求过高
3.跨域问题
4.不可扩展
在大规模中,不同的服务器集群构成服务端,在面对负载均衡时,不同的服务器之间session不通,需要复制过来穿过来传过去,浪费时间和空间如下图所示
![](https://www.noah-dream.com/usr/uploads/2020/08/1371396870.png)
那么为了解决这个问题,就产生了token。
二.关于token
token的创建流程图:
![](https://www.noah-dream.com/usr/uploads/2020/08/1708153610.png)
token构成:
uid(用户的身份标识),time(当前时间戳),sign(签名)
token的工作原理:
1.浏览器向服务器发送请求
2.服务器产生一个token,这个token中包含标示,密钥等,确保安全性,返回给浏览器,存储在cookie或者某些地方
3.再次发起请求,在header中携带token发送请求