标签:问题解决 let date() 知识 代码 ane 客户端访问 资源 监视
关于Session timeout,是一个非常有效的节约服务器资源的方法,而且关于timeout的时间限制设定也非常有讲究,跟业务关系强相关。
如果服务器是只有一台,或者服务器集群中没有使用负载均衡器,那么session的管理是非常简单的。但是今天想描述的一个问题是,在服务器集群内使用session,并且有负载均衡器管理流量,这时候出现的奇异session timeout问题。
首先有几点前提知识需要阐述一下:
现在问题是:在浏览器A子标签中访问站点首页导航,并点击进入子页面,建立浏览器与服务器的session(关于session的建立时间在本文最后有解释);然后在同一个浏览器中打开第二个、第三个、第四个子标签访问子页面,并进行相关操作,操作时间必须超过第一个子标签在服务器的session timeout时间;接下来继续打开第五个子标签访问站点首页,这时出现一进入站点就出现session timeout。
问题分析:出现这种情况的基本原因是客户端同一个浏览器之间的子标签session共享,而服务器之间默认是不共享session的,并且负载均衡器默认也不会根据session来分发流量,所以就会出现上述情况。
问题解析:当第一个子标签访问网站时,负载均衡器将流量随机导到服务器A上,因此该浏览器与服务器之间的session就建立了,而后该浏览器打开的子标签二,子标签三,子标签四的流量分别被导向其他的服务器,进过一段时间的操作,该浏览器与服务器A的session已经timeout了,而后第五个子标签访问网站时,负载均衡器又将流量转到了服务器A上,这是浏览器和服务器A的session已经timeout了,所以一进网站就会session timeout。
问题解决:核心思路,session共享、session同步,保证服务器集群之间的session一致。如果是非产品环境,可以把服务器的数量减少到1台,而如果是产品环境,就需要在负载均衡器中加session管理服务器,需要负载均衡器从session管理服务器中拿session与服务器的对应关系,然后在将流量导入到相关的服务器中,这样不会出现session不一致的问题。
关于session的一起其他知识:
标签:问题解决 let date() 知识 代码 ane 客户端访问 资源 监视
原文地址:https://www.cnblogs.com/petewell/p/11601759.html