本次问题描述:客户反映,在登陆后,如果不进行操作一段时间。再操作会出现自动登出的情况。根据该情况进行排查,发现系统中设置的session保持时长为9小时。但是为什么会出现类似情况呢? 解答:本次情况和系统本身设置的session时长无关,如果设置时长是1分钟,那么1分钟未操作系统,再操作的时候会自动登出。 session保持时长:这个概念为两次向后套请求的时间间隔长度,也就是如果不操作系统9小时,那么再操作时会自动登出,但是一直操作系统的话,不会登出。 session共享:本系统有两台服务器,在配置负载均衡的时候设置了session共享。 本次的问题,明确了本系统的session保持时间,但是还是出现这样的问题,所以就怀疑负载均衡的session保持时间。问了一下网络的同事,确实为负载均衡的session保持时间较短,为300s,所以会出现这种问题。
解决,这种问题的解决,一般使用keepalive。 我们的解决方案是定时向后台发出一个异步请求,比如现在是300s,我们就设定没250s去进行一次ajax请求
$(function() {
/**
* 数据传输
*/
function sendMsg(){
$.ajax({
type: "post",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: ctx + "RequestUrl/reUrl",
data: {},
success: function (data) {
},
error: function (err) {
alert("err:" + err);
}
});
}
setInterval(sendMsg,240000); //定时传送数据
});
该function一定要放到$(function(){})内部。因为setInterval定时读取的方法一定要在内部,并且在setInterval方法前定义