您的位置:首页 > 其它

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

2017-12-15 00:00 381 查看
点击上方蓝字进行关注的都是靓仔和仙女呦
什么是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支持的功能,应用程序不需要修改代码
 
不足
<
4000
li>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个大数据工具和框架
[b]推荐程序员必备微信号 [/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: