一、Cookie
误解:cookie是缓存
1、什么是cookie?
cookie的本质是一小段的文本信息,格式是字典key=value。cookie的名称不是固定的是由开发自定义的。
2、cookie的分类
会话cookie:保存在内存,当浏览器的会话关闭之后自动消失;
持久cookie: 保存在磁盘,只有当失效时间到期后才会自动消失;
3、cookie的格式
{name:值,value:值, Domain:域名, Path:路径, expires:失效时间,size:大小,...}
4、查看cookie方式:
1、查看当前网页的cookie: F12 -> application -> cookie;
2、查看浏览器所以网页的cookie: 浏览器 -> 设置 -> 隐私设置与安全性 -> 查看所有cookie和网站数据
5、cookie鉴权(鉴定权限)的原理
1、客户端第一次请求服务器B,服务器产生cookie,然后通过响应头的set-Cookie字段把cookie的信息返回给客户端;
2、客户端从第二次开始访问服务器B,在请求头的cookie中都会自动带上该Cookie信息,从而实现鉴权。
6、Cookie存在的问题
因为cookie保存在客户端,cookie的数据可以在客户端被截获。对于一些机密的数据,比如用户名和密码、银行卡号和支付密码、身份证号码登信息。
所以演进了新的技术,使用Cookie保存不重要的数据信息,然后再使用Session来保存重要的数据。
二、Session
session是通过cookie来传值的。
1、session鉴权原理
当客户端第一次登录服务器的时候,服务器会创建一个session来保存用户的重要信息,并起名为sessionId(具体命名由开发决定,一般是一段比较长的经过加密的字符串)。然后通过cookie的鉴权方式实现session的鉴权。
2、session的问题
造成服务器性能瓶颈
三、Token令牌
1、 token两种获取方式:
1、登录之后,自动生成token
2、通过一个特定的获取获取token的接口去获取token
后面的每一次请求都必须带上token实现鉴权。
2、token加码方式
1、对称加密: EDS、AES
2、双钥加密: RSA,一般用于金融项目里面做签名
3、只加密不解密:MD5、SHA系列
4、编码格式: Base64
3、token类型
1、access_token:时效15分钟到2小时;
2、refresh_token: 时效15天
面试题:cookie、session和token的相同点和差异?
相同点:都是用来实现身份验证(鉴权)的,都是由服务器产生的;
差异:
1、cookie是保存在客户端,session是存储在服务器;
2、session保存在服务器的内存中,默认是30分钟;token是保存在服务器的数据库中,持久的。