2015-03-31 56 views
0

我已經使用了一些jquery keepalive會話插件沒有問題。jquery保持活躍/任何客戶端交互?

我被問了一些有點不同的東西。

我們有一些形式(在我開始之前構建的),它們相當大,用戶在其中工作了一段時間。該頁面從不刷新,因此它們單擊保存,會話過期並重定向到登錄頁面。

我建議使用這些插件之一,它會在會話過期前幾分鐘提示用戶,這會使ajax呼叫保持會話的活躍。

但是,他們說,如果他們沒有看到提示信息並將它們全部放在一起並將其註銷,會怎麼樣。

他們希望我來檢查

  1. 有用戶曾在最後5分鐘的頁面的任何交互。 如果是= Ajax調用保持活動會話,並重置計時器。 如果否,繼續等待,直到我們在會話超時2分鐘內超時並提示用戶。

他們試圖避免提示。

無論如何JS/Jquery知道頁面是否有任何客戶端的交互?

+0

以及使用'mousemove'事件,當鼠標移動時重置一個時間間隔別人叫阿賈克斯達成的具體時間。 – Jai 2015-03-31 12:52:04

回答

0

而不是使用計時器來檢查他們是否在過去5分鐘內有任何交互,你不能只是在表單發生變化時發送Keepalive嗎?這將消除對定時器循環和小負載ajax調用的需求,只是爲了保持會話活躍而不會損害性能。

如果你仍然想保持計時器循環,我仍然建議在你的表單元素上使用change事件。更改表單意味着他們正在與之交互,我認爲這符合他們的要求。

編輯:更新使用的定時器

var idle = true; 

function finalIdleCheck(prompt){ 
    if(idle){ 
     if(prompt){ 
      alert("last warning!"); 
     } 
     //Tighten the idle check time loop; may even want to go < 30s 
     setTimeout(finalIdleCheck, 30*1000); 
    } else { 
     //Ajax stuff to keep session alive 
     idle = true; //Reset idle flag 
    } 
} 
function checkIdle(){ 
    if(idle){ 
     //Warn them 
     alert("You've been idle"); 
     setTimeout(function(){ 
      finalIdleCheck(true); 
     }, 60*2*1000); 
    } else { 
     //Ajax stuff to keep session alive 
     idle = true; //Reset idle flag 
    } 
} 

$(document).ready(function(){ 
    $("form input").on("change", function(){ 
     idle = false; 
    } 
    setTimeout(idleCheck, 60*5*1000); 
} 
+0

謝謝你的想法。我向我的經理提出了同樣的想法,但他擔心每次終端用戶與表單進行交互時總是輪詢Keepalive的帶寬。這就是爲什麼我在想,可能會在用戶與表單交互時設置一個標誌,然後每5分鐘一次,如果該標誌爲真,則將ajax調用爲保持活動狀態。 – frmrock164 2015-03-31 13:50:11

+0

你仍然可以用上面的代碼使用該邏輯。我會相應地更新它。 – wholevinski 2015-03-31 13:52:54

+0

使用計時器添加解決方案;它不是很乾,但我只是想讓你把它分解成不同的功能。 – wholevinski 2015-03-31 14:06:43