分布式系统中使用分布式session和token的区别

一、分布式session
因为是分布式的系统,传统的单机session不适用于分布式系统中,可以使用分布式session。
本质是使用第三方的数据库(建议是非关系型数据库)来存储session信息,例如Redis、Mongo DB,可以使用spring 提供的spring session组件
用户登录请求发送到服务器后,服务器进行校验,如果通过,服务器会使用session把用户的信息临时保存在了服务器上,客户端同时也会存将session信息存储在cookie上,离开网站后session会被销毁。
Session共享问题
是指在一个浏览器访问多个 Web 服务时,服务端的 Session 数据需要共享。
方案:
Session 复制
通过对应用服务器的配置开启服务器的 Session 复制功能,在集群中的几台服务器之间同步 Session 对象,使得每台服务器上都保存所有的 Session 信息,这样任何一台宕机都不会导致 Session 的数据丢失,服务器使用 Session 时,直接从本地获取。这种方式的缺点也比较明显。因为 Session 需要时时同步,并且同步过程是有应用服务器来完成,由此对服务器的性能损耗也比较大。
Session 服务器
Session 服务器可以解决上面的所有的问题,利用独立部署的 Session 服务器统一管理 Session,服务器每次读写 Session 时,都访问 Session 服务器。 对于 Session 服务器,我们可以使用 Redis 或者 MongoDB 等内存数据库来保存 Session 中的数据,以此替换掉服务中的 HttpSession。达到 Session 共享的效果。
二、Token
近年来,基于token的认证开始成为主流,客户端登陆成功后,服务端会加密生成一个token并把它返还给客户端,客户端存起来,之后发起请求后可以在header里存放对应属性达到鉴权的目的。
当客户端再发送请求时,服务端可以通过解密,解析出用户的信息,从而进行鉴权校验。
token相比其他验证方式,主要是无需每次都去验证用户名密码,同时由于token保存在前端,服务端无需保存每个用户的登录状态,只需要验证访问时带着的token是不是自己签发的,可以减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
token存在的问题:
1.刷新问题及过期失效问题
参考spring security oauth2 的双token机制
2.Token被截取问题
使用https连接
三、Token和session的比较
Session的弊端
1、服务器压力增大
通常session是存储在内存中的,每个用户通过认证之后都会将session数据保存在服务器的内存中,而当用户量增大时,服务器的压力增大。(可以将数据保存在磁盘中)
2、CSRF跨站伪造请求攻击
session是基于cookie进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。
3、扩展性不强
如果将来搭建了多个服务器,虽然每个服务器都执行的是同样的业务逻辑,但是session数据是保存在内存中的(不是共享的),用户第一次访问的是服务器1,当用户再次请求时可能访问的是另外一台服务器2,服务器2获取不到session信息,就判定用户没有登陆过。(可以使用分布式session将session在各个集群中保持一致)
Token可以有效解决session的CSRF跨站伪造请求攻击,虽然token也有被截取的风险,但是可以通过https加密及合理设置token的有效时间及刷新时间来解决。

以上仅对个人学习过程中的一些问题进行记录

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cookie、SessionToken都是用于在web应用进行身份认证、授权和保持登录状态的机制,它们各自有不同的作用。 1. Cookie Cookie是一种存储在客户端的小型数据文件,主要用于保存一些用户的个人信息或者网站的状态信息,如用户的ID、用户名、购物车的商品等等。Cookie是由服务器生成的,通过 HTTP 协议传递到客户端,客户端存储后,每次访问同一站点时,都会把这个 Cookie 发送给服务器。Cookie主要有以下特点: - Cookie 的大小有限制,一般为4KB左右。 - Cookie 存储在客户端,容易被窃取和篡改。 - Cookie 可以设置过期时间,一旦过期,浏览器就不再发送该 Cookie。 2. Session Session 是一种在服务器端记录客户端状态的机制,它通过在服务器端存储一个 Session ID 来维护用户状态,可以用来保存一些敏感信息,如用户的登录状态、权限等。Session 的主要特点: - Session 数据存储在服务器端,安全性高。 - Session 的大小无限制。 - Session 依赖 Cookie 机制,客户端必须支持 Cookie。 3. Token Token 是一种无状态的身份认证机制,它不依赖于 Cookie 或 Session,而是通过在客户端和服务器之间传递一段加密过的字符串来进行身份认证和授权。Token 主要有以下特点: - Token 是无状态的,服务器不需要维护用户状态,可以支持分布式系统。 - Token 的安全性高,可以使用 JWT 等加密技术来保证信息的安全。 - Token 可以设置过期时间,一旦过期,客户端需要重新获取 Token。 总体来说,Cookie、SessionToken都是常用的身份认证、授权和保持登录状态的机制,它们各自有不同的特点和适用场景,开发者需要根据实际情况选择合适的机制来保证系统的安全性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值