本次問題描述:客戶反映,在登錄後,若是不進行操做一段時間。再操做會出現自動登出的狀況。根據該狀況進行排查,發現系統中設置的session保持時長爲9小時。可是爲何會出現相似狀況呢? 解答:本次狀況和系統自己設置的session時長無關,若是設置時長是1分鐘,那麼1分鐘未操做系統,再操做的時候會自動登出。 session保持時長:這個概念爲兩次向後套請求的時間間隔長度,也就是若是不操做系統9小時,那麼再操做時會自動登出,可是一直操做系統的話,不會登出。 session共享:本系統有兩臺服務器,在配置負載均衡的時候設置了session共享。 本次的問題,明確了本系統的session保持時間,可是仍是出現這樣的問題,因此就懷疑負載均衡的session保持時間。問了一下網絡的同事,確實爲負載均衡的session保持時間較短,爲300s,因此會出現這種問題。ajax
解決,這種問題的解決,通常使用keepalive。 咱們的解決方案是定時向後臺發出一個異步請求,好比如今是300s,咱們就設定沒250s去進行一次ajax請求json
$(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方法前定義服務器