为什么要使用cookie、session、token,因为http协议是无状态的,服务端无法区分到底是哪个客户端在访问自己
1.cookie
cookie是什么:cookie就是浏览器存放在用户电脑上的一个文本文件。
cookie的生成:客户端首次访问服务端,并在header中携带set-cookie,服务端会返回给客户端cookie,并存放在客户端。cookie中的内容由后端开发在代码中定义。
cookie的约束:cookie最大为4KB,同一个域名,最多存放50个cookie。
cookie的使用:浏览器在向服务端发送请求时,会自动在请求头中添加cookie,服务器接收cookie,解析cookie,验证信息成功后返回响应
2.session
session是什么:session是用于对客户端身份校验的。
session的生成:客户端首次访问服务端,服务端会生成session及session id,并保存在服务端,将session id添加到cookie中返回给客户端。
session的约束:1.用户量巨大时,会占用大量的服务器资源,影响服务器性能。2.当服务端实现负载均衡时,很难确定session存储在哪个服务器上。3.session容易被crsf(跨站请求伪造)
session的使用:浏览器发送请求时会在header中添加cookie,服务端会解析到session id,在数据库中进行比较,已确实是哪个用户,并将该用户的数据进行响应
3.token
token是什么:token又名令牌,用于对用户进行鉴权,目前最常见的鉴权方式。
token的生成:客户端进行登录时,服务端会返回token,客户端将token存放的localStroage,token一般是由userid+时间戳+令牌+秘钥(固定字符串),通过加密后实现的。
token的使用:客户端发送请求时,会自动将token添加到header中,服务端收到header后,会自动解密,确定是哪个用户在请求数据,返回该用户的数据。
token的优点:1.由于token中存在用户的信息,鉴权时直接在数据库中进行查找,所以可以很好的适应负载均衡的服务端。2.token是开发者专门为防护crsf设计的,浏览器访问攻击者网址时,不会自动携带token,攻击者网址无法获得token。就无法通过服务端校验。