cookie、session、token
什么是cookie
1.http是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,
服务端不会保存任何会话信息)
2.cookie 存储在客户端:cookie是服务端发送到客户端的一小块数据,它会在下一次向
同一服务器发起请求时被携带并且发送到服务器
3.cookie是不可跨域的:绑定单一域名、一级域名与二级域名之间允许共享使用(靠的是
domin)
4.格式键值对
什么是Session
session是另一种记录服务器和客户端会话状态的机制
session是基于cookie实现的,session存储在服务器端,sessionId会被保存在cookie中
session的认证流程:
1.第一次访问的时候,客户端发送请求,根据用户信息生成一个session,保存在服务端,
2.将session的唯一标识sessionId返回到客户端
3.客户端将sessionId保存到cookie中,同时记录这个sessionId对应那个域名
4.当第二次访问时侯,浏览器会自动判断该域名是否有cookie信息,如果有会自动将cookie
发送给服务器,服务端会自动在cookie中获取sessionId,再根据sessionId查找对应的
session信息,如果没有找到说明还没有登录,如果找到说明已经登陆可以访问。
sessionId是用来连接session和cookie的一个桥梁。
cookie和session的区别:
安全性:session的安全性比cookie的安全性高,session存储在服务端,cookie存储在
客户端。
存储值的类型不同:cookie只支持字符串数据,session可以支持任意数据类型。
有效期不同:cookie可以长时间保存,session默认会在客户端关闭,或者session超时的时候
存储的大小不同:cookie大小不超过4kb,而session大的多,但访问量过多的时候,会占用
服务器资源。
什么是Token
Acesss Token
访问资源接口(API)时所需要的资源凭证
简单token的组成:
uid(用户唯一的身份标识)、time(当前的时间戳)、sign(签名,token的前几位哈希运算
压缩成的一定长度的十六进制字符串)
特点:
服务端无状态话、可扩展性好
支持移动端设备
安全
支持跨域程序调用
过程
1.客户端输入用户名密码发起请求
2.服务端接收到请求之后,对用户密码进行验证
3.验证成功之后,服务端生成一个token,并且将token传递到服务端保存在cookie或者local–
storge中
4.客户端每次向服务端请求资源的时候需要带着服务端签发的token
5.服务端收到请求,然后去验证客户端请求里面携带的token,如果验证成功,就像客户端返
回数据。
注意:
每次请求都需要携带token,需要把token放到http的header中
基于token的用户认证是一种服务端无状态的认证方式,服务端不用存放token数据。用解析
token的时间换取session的存储空间,从而减轻服务器的压力,减少频繁查询数据库。
token完全由应用管理,所以它可以避开同源策略
Refresh token
另一种token,用来刷新Acesse Token
如果没有Refresh token,也可以刷新access token,但每次刷新都要重新输入用户名
密码,会比较麻烦。有了refresh token,可以减少这个麻烦