cookie:
cookie网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密),发送请求时,cookie会随着请求头一起发给服务器, cookie储存于浏览器
作用:识别用户信息,储存用户数据
cookie具有时效性,存活时间取决于不同的网站,在cookie未失效时,若再次登录该网站,则会自动登录,不需要重新输入账号与密码
网站给我们投放我们搜索浏览内容相关的广告是因为cookie储存着我们的浏览信息,浏览器为了恰饭,会查看我们的cookie从而推送相应的广告
session:
session是服务器为了保存用户状态而创建的一个特殊的对象。session储存在服务器
当用户第一次登陆网站时,服务器会生成一个session,并将该sessionID发送给用户储存在cookie中,当第二次发送请求时,sessionID就随着cookie一起发送,浏览器就可以识别出是谁发送的请求
当用户离开网站时,储存的session会被销毁
token:
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
作用机制:服务器并不保存token,而是通过数据签名的方法,对数据用算法(如SHA-256)与私钥进行签名后作为Token,当Token发送给服务器时,服务会通过相同的算法与密钥进行签名,如果和Token中的签名相同,服务器就知道用户已经登录过了,并且可以直接得到用户的userID。(服务器用cpu的计算时间来换取了储存空间)
接下来介绍各自的区别:
鉴权认证方式 | 特点 | 优点 | 缺点 |
cookie | 1.存储在客户端。2.请求自动携带cookie。3.存储大小4KB | 1.兼容性好,因为是比较老的技术。2.很容易实现,因为cookie 会自动携带和存储。 | 1.需要单独解决跨域 携带问题,比如多台 服务器如何共享 cookie。2.会遭受CSRF 攻击。3.存储在客户端,不够安全。 |
session | 1.存储在服务端。2.存 储大小无限制。 | 1.查询速度快,因为是个会话,相当于是在内存中操作。2.结合 cookie 后很容易实现鉴权。3.安全,因为存储在服务端。 | 1.耗费服务器资源, 因为每个客户端都会 创建 session。2.占据存储空间,session 相当于存储了一个完整的用户信息。 |
token | 1.体积很小。2.自由操作存储在哪里。 | 1.安全,因为 token一般只有用户 id,就算被截取了也没什么用。2.无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息。3.跨域处理较为方便比如多台服务器之间可以共用一个token。 | 1.查询速度慢,因为token只存了用户id,每次需要去查询数据库。 |
总结下就是:session是空间换时间,而token是时间换空间。