分析比较Cookie,Session和Token的产生过程和使用场景
HTTP协议基本概念
- 访问网页使用的都是HTTP协议,而HTTP协议的每一次访问都是无状态的
- HTTP协议访问无状态:
- 每一次请求都是没有关联的
- 优点: 快速
- 缺点: 无法将两次请求关联起来
- 为了关联两次请求,使得Web服务器记住关联关系,就出现了Cookie
Cookie
- Cookie是Web服务器产生的,保存在客户端
- Cookie容易被劫持,是不安全的数据
Cookie产生过程
- 浏览器第一次访问服务器时 ,Web服务器会创建一个独特的身份标识,格式为key-value的键值对,放入到Set-Cookie字段里,随着响应报文一起发送给浏览器
- 浏览器看到有Set-Cookie字段是服务器给的身份标识,会将身份标识保存起来,在下一次请求时会自动将Set-Cookie字段里的key-value值放入到Cookie字段中发送给服务器
- 服务端接收到请求报文后,发现Cookie字段中有值,就能根据该值识别用户的身份然后提供个性化服务
Cookie分类
- 持久化Cookie:
- 可以存在硬盘中,即使关闭浏览器 ,Cookie也是存在的
- 非持久化Cookie:
- 保存在内存中,如果浏览器关闭 ,Cookie则随之消失
Cookie使用场景
Cookie总结
- Cookie数据由Web服务器生成保存在客户端
- Cookie的数据格式为键值对key-value
- Cookie数据有效和失效时间看expire值
- 在项目实践中主要用于记住用户名密码和保存浏览器已经访问过的网页
Session
- Session也是由Web服务器产生的,保存在服务器
Session的产生过程
- 当用户登录了系统,服务器端的web容器就会创建一个session
- 此会话中可以保存用户的登录信息,并且也是以键值对key-value的形式去保存的
- 系统通过session技术完成鉴权,因为只有用户登录了才可以访问系统中的页面和数据
Session使用场景
- 一般只保存用户的用户名
- 默认时长是30分钟,超过时长则失效,需要重新操作
Session总结
- Session是由Web服务器生成,保存在服务端
- Session的数据格式是键值对
- Session的默认失效时间是30分钟
- 一般在响应头的cookie或者set-cookie中查看
- 在项目实践中,主要用于鉴权来判断是否为登录状态,只有是登录状态才可以访问服务器的网页和数据
Token
Token产生过程
- 用户第一次登录时,服务器端会产生一个token,token会保存在服务器的数据库中,然后将这个token返回给浏览器
- 客户端接收到token后,会将token保存在本地
- 客户端再次发送请求时,会将token发送到服务器上
- 服务端接收到这个token时会将token与本地的token进行比较,用来验证身份
Token使用场景
- 一般用于App项目登录和接口鉴权
- 因为App项目和接口客户端不是浏览器,因此就没有cookie和session, 所以就通过token来鉴权