实现会话控制的方式有cookie
、session
、token
作用:实现会话控制,服务器可以识别用户身份
Cooike
cooike是HTTP服务器发送到用户浏览器并按照域名划分保存在本地的一小块数据。
浏览器像服务器发送请求时,会自动将当前域名下可用的cookie设置在请求头中,传递给服务器。
运行流程
浏览器发起请求,服务器校验身份后,下发cookie,后续请求浏览器自动携带cookie
浏览器操作cookie
禁用cookie
删除cookie
查看cookie
生命周期
生命周期结束关闭浏览器后,cookie就消失了
设置生命周期:Max-Age
Ssession
session是服务器端的一种数据结构,用来跟踪用户的状态
session的生命周期是由服务器来维护的,当用户关闭浏览器后,session就消失了
运行流程
- 用户提供用户信息发起请求
- 服务器验证身份
- 身份验证通过,创建session对象,保存用户信息
- 服务器生成唯一的ID,sessionID
- 将sessionID写入cookie
- 浏览器携带cookie访问服务器
- 服务器读取cookie,获取sessionID
- 根据sessionID查找session对象
session的缺点:
- 服务器存储的session信息都是明文的,安全性较差
- 服务器存储的session信息有一定的存储大小限制,如果存储的session信息过多,会影响性能
- 服务器存储的session信息是有时间限制的,如果用户长时间不操作,session就过期了
cookie、session区别
- 存储位置不同
cookie存储在客户端浏览器,session存储在服务器上。 - 安全性
cookie是客户端明文存储,session是服务端存储,安全性高。 - 网络传输量
cookie 设置内容过多会增大报文体积,session只需要设置sessionid即可。 - 存储限制
浏览器限制单个cookie保存数据不能超过4k,单个域名下的cookie数量也有限制。
session 数据存在服务器,没有存储大小限制,可以存储非常大的对象。
token
token是服务端生成并返回给http客户端的已传加密字符串,token中保存着用户信息
工作流程:
- 用户登录,服务端生成token,并将token返回给客户端
- 客户端将token保存到本地,并将token传递给后端
- 后端根据token获取用户信息,并返回给客户端
token优点:
- 安全性高,token是加密的,只有服务端和客户端知道token的内容,其他人无法获取到
- 服务端压力更小
- 可以避免CSRF攻击(跨站请求伪造)
- 扩展性更强,服务间可以共享,增加服务节点更简单
session和cookie特征
- 都是由服务器生成,用来存储特定的值
- session是存储在服务端,cookie存储在客户端。sessionID会以类似cookie的方式返回给客户端。
形式:响应头 set-cookie
sessionID是服务用来识别、操作存储session值的对象的。
一般来说,session在服务端存储的方式有文件方式、数据库方式。sessionID就是来识别这个文件、数据库某一条记录的。 - 客户端(浏览器,postman)在发送请求的时候,会将存活可用的cookie封装在请求头中和请求一起发送给服务端。浏览器自行操作。其他客户端不会自行处理封装cookie。
形式:请求头 cookie - 都有生命周期
cookie的生命周期影响因素:①服务端生成cookie时设定的时间;②客户端是否保留了 cookie。未保留,别的客户端拿着这个cookie去访问一样有效。
session的生命周期影响因素:①服务器对session对象的保存的最大设置时间。②客户端进程是否关闭,只对客户端自身有影响。 - 都有作用域
网友评论