Session 管理问题

Session 管理问题

前言及问题

题外话,最近几天看了一本书《图解 HTTP》,用来了解一下 HTTP 的基础知识还是相当不错的一本书。因 HTTP 协议设计时设计为了无状态的连接协议。而之后便产生了 Cookie 和 Session 这两种保存 HTTP 连接状态的技术。

用来管理服务器与客户端之间状态的解决方案,Cookie 存在客户端,Session 保存在服务器中。

随着项目越来越大,以及分布式之类的,单一的系统已经无法满足需求,故这时候就会将系统拆分。而不得不面对的是服务器中 Session 的管理问题,例如大型的商城项目(订单系统,支付系统等),对用户来说,这只是一个商城,不管背后有多少个系统,在登录后,即可在商城中的各个系统中进行操作。


解决方案

Session Sticky(粘滞会话)

  • 用户每次访问都是同一台服务器进行处理,不将 Session 信息复制到其它服务器中
  • 缺点:不符合高可用,一旦访问的服务器 down 掉了,相关的 Session 数据就丢失了

Session Replication(复制会话)

  • 将 Session 数据复制到其它服务器,实现高可用
  • 缺点也很明显,效率低,占用更多的资源,每台服务器都要保存全局的 Session 数据
  • 在服务器中不使用 Session,而是将用户信息加密存储在 Cookie 中。这种方式看到的不多,相关链接:安全cookie登录状态设计方案
  • 缺点很明显,安全性差,一旦被人获取到 cookie,盗用相关的 token 即可。

Session 集中式管理(常用)

目前使用的最多的一种解决方案。使用集群中的某台服务器对 Session 进行统一管理,其它系统操作时,在通过这台服务器获取 Session 信息。

  • 优点:可靠性好,适用于大的数据访问量
  • 缺点:实现较为复杂,维护成本高

后记

以上有四种方案,不过常用的是最后一种,下回则会详细介绍这种方式的实现思路,也就是实现一个 SSO 系统(单点登录系统)。

在实践中成长

HochenChong

2018-06-20

猜你喜欢

转载自blog.csdn.net/hochenchong/article/details/80752177