清空购物车的人可能不是你 彻底解决session丢失的问题

点击上方蓝字进行关注的都是靓仔和仙女呦


什么是session?


服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。

 

什么是session一致性问题?


只要用户不重启浏览器,每次http短连接请求,理论上服务端都能定位到session,保持会话。

当只有一台web-server提供服务时,每次http短连接请求,都能够正确路由到存储session的对应web-server(废话,因为只有一台)。

 

此时的web-server是无法保证高可用的,采用“冗余+故障转移”的多台web-server来保证高可用时,每次http短连接请求就不一定能路由到正确的session

如上图,假设用户包含登录信息的session都记录在第一台web-server上,反向代理如果将请求路由到另一台web-server上,可能就找不到相关信息,而导致用户需要重新登录。

 

web-server高可用时,如何保证session路由的一致性,是今天将要讨论的问题。

 

session同步法


思路多个web-server之间相互同步session,这样每个web-server之间都包含全部的session

 

优点web-server支持的功能,应用程序不需要修改代码

 

不足

  • session的同步需要数据传输,内网带宽,有时延

  • 所有web-server都包含所有session数据,数据受内存限制,无法水平扩展

  • 有更多web-server时要歇菜

 

客户端存储法

思路服务端存储所有用户的session,内存占用较大,可以session存储到浏览器cookie,每个端只要存储一个用户的数据了

 

优点服务端不需要存储

 

缺点

  • 每次http请求都携带session外网带宽

  • 数据存储在端上,并在网络传输,存在泄漏、篡改、窃取等安全隐患

  • session存储的数据大小受cookie限制

 

“端存储”的方案虽然不常用,但确实是一种思路。

 

后端统一存储

session存储在web-server后端的存储层,数据库或者缓存

 


优点

  • 没有安全隐患

  • 可以水平扩展,数据库/缓存水平切分即可

  • web-server重启或者扩容都不会有session丢失

 

不足:增加了一次网络调用,并需要修改应用代码

 

对于db存储还是cache,个人推荐后者session读取的频率会很高,数据库压力会比较大。如果有session高可用需求,cache可以做高可用,但大部分情况下session可以丢失,一般也不需要考虑高可用。


 

想更加详细,更加深入的了解session丢失的问题吗?

在这里部落告诉大家一个小秘密


今晚8:30

动脑学院  Lison大神


将在腾讯课堂  动脑学院  免费Java公开课中

给大家详细讲解


《 清空购物车的人可能不是你  彻底解决session丢失的问题》


你只需要在今晚8:30的时候


点击文章最末 阅读原文


即可进行观看





推荐阅读  

高并发与分布式系统的基石--数据库读写分离实战

这就是学编程的下场...

论程序员与产品经理是怎么互掐起来的

如何假装成为一名好的程序员

来自部落的邀请

Java框架 Spring 核心机制

至程序员的情书

Java高级部落送你ofo小黄车60天免费骑行,还不来?

Facebook研发的Cassandra你用过吗?

给 Java开发者的10个大数据工具和框架


推荐程序员必备微信号 

Java高级部落

微信号:javagaojibuluo



在部落里,将会分享程序员相关的的技术,职场生活,行业热点资讯....以及更多好玩的IT趣文和趣图都在此部落中.....这....只属于我们程序猿.....
 ▼长按下方↓↓↓二维码识别关注


推荐学习资料获取微信号 

长按下方二维码识别关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值