cookiesessiontoken三者区别和优缺点

admin2024-04-03  0

cookie/session/token三者区别和优缺点

  • cookie
  • session
  • token
  • 三者对比

cookie

cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。==所以cookie是保存在浏览器的客户端。==一般会存储用户的身份信息,有些系统也会通过cookie记录一些用户的操作习惯。

优点:

  • 易于使用,可以由服务器在响应头中设置。
  • 大多数浏览器支持并在所有请求中发送cookie。
  • 可以存储大量数据。
  • 与服务器保持状态,有助于进行状态管理。

缺点:

  • 大小限制(通常为4KB)并且浏览器都限制一个站点最多保存20个cookie。
  • 易于遭到XSS攻击,因为存储在客户端,攻击者可以访问。
  • CSRF攻击,需要额外的防护措施。
  • 隐私问题,用户数据存储在本地,并且数据可以被轻易查看。。
  • 性能影响,每次请求都会发送cookie数据。
  • 字符编码为 Unicode,不支持直接存储中文。
  • 不可跨域

session

Session是一种在服务器端存储用户会话信息的方式,通常与Cookie配合使用,以保持用户的状态。Session的优点包括安全性较高因为数据保存在服务器端,不易被篡改;其缺点包括可能增加服务器的负担,特别是在高并发情况下,以及可能面临扩展性问题,如服务器集群时的Session同步问题。

优点:

  • 存储空间较cookie大。
  • 不会被保存在客户端,相对更安全。
  • 可以使用服务器端存储,如数据库,可以更容易进行扩展。

缺点:

  • 需要在服务器端保存,增加服务器负担。
  • 依赖于服务器,服务器宕机或重启会导致数据丢失。
  • 无法跨域进行session管理。
  • 用户登录后,服务器需要维护用户状态,增加服务器负担。

token

Token则是在服务器端生成并在认证过程中分发给客户端的数据片段,通常用于验证客户端的身份。Token可以包含用户的身份信息和权限声明,存储在服务器的数据库中;客户端可以将Token保存在任何地方,如本地存储或服务器端的缓存系统中。Token 可以有效地避免了 Cookie 的一些安全问题,比如 CSRF (跨站请求伪造)攻击。

优点:

  • 无需在服务器端保存session信息,减少服务器负担。
  • 支持跨域会话(只要客户端携带token即可)。
  • 无状态、可扩展性好。
  • 支持移动设备使用。
  • 安全性较高,不需要保存在客户端。
  • 不需要依赖cookie,可以避免XSS和CSRF攻击。

缺点:

  • 如果token被盗,那么攻击者可以不受限制地访问数据。
  • 每次请求需要传输token,可能会增加带宽消耗。
  • 服务器不能主动向客户端发送信息,需要依赖于客户端轮询或者长轮询。

三者对比

cookie、session、token三者最终的目的都是一样:鉴权和认证,下面使用表格的方式直观的描述下三者的优缺点。

方式特点优点缺点
cookie1.存储在客户端。
2.请求自动携带 cookie。
3.存储大小 4KB。
1.兼容性好,因为是比较老的技术。
2.很容易实现,因为 cookie 会自动携带和存储。
1.需要单独解决跨域携带问题,比如多台服务器如何共享 cookie。
2.会遭受 CSRF 攻击。3.存储在客户端,不够安全。
session1.存储在服务端。
2.存储大小无限制。
1.查询速度快,因为是个会话,相当于是在内存中操作。
2.结合 cookie 后很容易实现鉴权。
3.安全,因为存储在服务端。
1.耗费服务器资源,因为每个客户端都会创建 session。
2.占据存储空间,session 相当于存储了一个完整的用户信息。
token1.体积很小。
2.自由操作存储在哪里。
1.安全,因为 token 一般只有用户 id,就算被截取了也没什么用。
2.无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息。
3.跨域处理较为方便,比如多台服务器之间可以共用一个 token。
1.查询速度慢,因为 token 只存了用户 id,每次需要去查询数据库。

总结下来就是session 是空间换时间,token 是时间换空间。

cookie数据存放在客户的浏览器上、session数据放在服务器内存上、token存储在服务器数据库上

参考文章:https://zhuanlan.zhihu.com/p/631349844

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!