1、什么是session

  a、web应用中将这些多次请求修改使用的上下文对象称作会话(session)

  b、Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

  c、当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话


2、session的应用场景

  在高可用的架构中,业务总是有状态的,比如电商交易类平台中,需要有购物车记录用户的购买信息;在社交类的网站中,需要记录用户的当前登陆状态、最新发布的消息及好友状态等,用户每次刷新页面都需要更新这些信息


3、session管理的几种手段

a)session复制

  应用服务器开启web容器的session复制功能,在集群中几台服务器之间同步session对象,使得每台服务器上都保存所有用户的session信息

  较大规模的情况下(session复制就会显得不足了)

wKiom1kuG5CzUnpGAABJUcA4Gc8169.jpg

b)session绑定

  ession绑定可以利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将来源于同一个IP的请求分发到同一台服务器上,显然session绑定不符合我们对系统高可用的要求,因为一旦服务器宕机,那么该机器上的session就不复存在了

  优点:实现简单、配置方便、没有额外网络开销

  缺点:网络中有机器Down掉时、用户Session会丢失、容易造成单点故障

wKiom1kuG9ux6bWAAABMWrCJqbs722.jpg

c)利用cookie记录session

  说明:网站没有客户端,可以利用浏览器支持的cookie记录session(事实上,许多网站或多或少地使用cookie记录session)

  不足:

  •   受cookie大小限制,能记录的信息有限

  •   每次响应请求都要传输Cookie,影响性能

  •   如果用户关闭cookie,访问就会不正常

wKiom1kuHDXzTHLmAABLwqUlt7s388.jpg


d)session服务器

  •  利用独立部署的服务器(集群)统一管理session

  •  应用服务器的状态分离,分为无状态的应用服务器和有状态的session服务器

  •  对于有状态的session服务器:分布式缓存+数据库等

  •  业务场景要求高的情况下,利用session服务集成单点登录(SSO)、用户服务等功能,或者开发专门的session服务管理平台

wKioL1kuHIeADS4WAABUyzXM01M697.jpg