会话控制技术分析

本文探讨了在分布式和集群环境下,浏览器访问服务器时会自动携带Cookie,相同域名登录验证根据浏览器端存储的名为JSESSIONID的Cookie查找服务器端保存的Session对象所带来的问题及解决方案,包括Session同步、将Session数据存储在Cookie中、反向代理hash一致性和后端统一存储Session数据等。
摘要由CSDN通过智能技术生成

**

一、会话控制

**
浏览器访问服务器时会自动携带Cookie,相同域名登录验证根据浏览器端存储的名为JSESSIONID的Cookie查找服务器端保存的Session对象。但这样会出现较多问题:
在这里插入图片描述

1、在分布式和集群环境下,每个具体模块运行在单独的Tomcat上,而Session是被不同Tomcat所“区隔”的,所以不能互通,会导致程序运行时,用户会话数据发生错误。有的服务器上有,有的服务器上没有。
在这里插入图片描述
针对这个问题的解决办法有如下:
(1)、Session同步
Session同步可以解决不同服务器之间的session问题,但是也造成Session在各个服务器上“同量”保存。TomcatA保存了1G的Session数据,TomcatB也需要保存1G的Session数据。数据量太大的会导致Tomcat性能下降
在这里插入图片描述
(2)将Session数据存储在Cookie中
即所有会话数据在浏览器端使用Cookie保存,服务器端不存储任何会话数据。但这个方法缺陷更加明显:
Cookie存储的数据量有限,一般只能存储4KB大小的文件,同一个域名只能保存20个cookie,
Cookie数据在浏览器端存储,很大程度上不受服务器端控制,如果浏览器端清理Cookie,相关数据会丢失。
(3)反向代理hash一致性
具体一个浏览器,专门访问某一个具体服务器,如果服务器宕机,会丢失数据。存在单点故障风险。仅仅适用于集群范围内,超出集群范围,负载均衡服务器无效
(4)后端统一存储Session数据
使用Redis数据库统一储存session。Session数据存取比较频繁。使用Redis内存访问速度快,Session有过期时间,Redis这样的内存数据库能够比较方便实现过期释放。Redis可以配置主从复制集群,不担心单点故障

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值