关于cookie、session、token的讨论

为什么有了session还需要token

  • Cookie+session不支持横向扩展,如果请求被负载均衡转发到了别的机器上,没有用户登录信息,就会导致用户请求失败。虽然可以使用redis做分布式session,但是单点故障风险太高,一旦redis崩掉,用户就全部无法访问。jwt将用户信息加密为一个字符串传给前端,后端不保存状态,每次都从前端获取状态。

Cookie、Session、Token有什么区别?

  • 存储位置不同:Cookie存储在客户端,Session存储在服务端、Token存储在客户端(通过加密方式存储在客户端的localStorage和sessionStorage)
  • 数据安全性不同:Cookie存储在客户端,容易被窃取。Session存储在服务器,避免了敏感数据直接暴露,Token通常使用加密算法,单向不可逆,比较安全
  • 跨域支持不同:Cookie不支持跨域,Session通常是通过Cook保存SessionID的,因此也不支持。
  • Token支持跨域,因为Token保存在本地的localStorage或者作为请求头的一部分发送到服务端,可以支持跨域。
  • 状态管理不同:Cookie是应用程序通过客户端存储临时数据,用于实现状态管理的机制。session是服务器记录用户状态的方式,服务器会为每一个对话分配一个sessionID,关联用户状态。Token是一种用于认证和授权的一种机制,通常表示用户的身份信息和权限信息。

误区纠正

  • cookie是浏览器的存储机制,应该和localstorage、sessionStorage、indexedDB、webSQL这种对比
  • session是保存在服务器的一个一组数据,有些网站采取session来用户机制,通常会把sessionID存储在cookie中。此外,session是一个抽象概念,具体实现可以用Redis
  • token和jwt,他们是信息的编码的东西,是信息本身 
  • cookie、session、token本质上是不同维度的东西,token也可以存储在cookie中,也可以存储在浏览器的localStorage中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值