2013-02-09 122 views
1

如何在Asp.Net MVC中執行此操作?如何在asp.net中處理會話mvc

  • 活動定時器:當用戶在頁面上導航(意味着做一些調用ActionResult的東西),定時器將重置。
  • 當用戶在超過15分鐘內沒有做任何活動時,他會被提示並被問到「你還在嗎?」 (是/ LogOut),如果他點擊是,則活動計時器將回到零,然後再次開始計數。
  • 此活動計時器對於每個用戶必須是唯一的,並且必須在註銷後銷燬。

請致電!對我有耐心!我不知道如何做到這一點。

我發佈了這個question但我沒有得到任何解決這個問題的答案。所以我打算從一開始就這樣做,我需要一些幫助/指導來正確地做到這一點。
任何參考鏈接或教程將不勝感激!

+0

我可能會錯過一些東西,但我認爲你可以在沒有動作過濾器的情況下做到這一點。我猜想計時器會在每個視圖渲染時重置(如果登錄),在15分鐘後觸發,然後在他們回答後重置。如果是這樣,我可以考慮一個相當簡單的設計。 – 2013-02-09 05:19:14

+0

很好的問題! – 2013-02-09 05:41:02

回答

1

我會在客戶端處理這個問題。創建一個對象來封裝功能。

喜歡的東西:

var UserInactivityMonitor = UserInactivityMonitor || {}; 
UserInactivityMonitor = (function (module) { 
    var inactivityIndex; 
    var promptIndex; 
    var timer; 

    module.startInactivityMonitor = function() { 
     module.timerTick(); 
    }; 

    module.timerTick = function() { 
     inactivityIndex--; 
     if (inactivityIndex === 0) { 
      module.fireInactivityAlert(); 
     } 

     if (inactivityIndex === promptIndex) { 
      module.fireIdlePrompt(); 
     } 

     timer = setTimeout(module.timerTick, 1000); 
    }; 

    module.fireIdlePrompt = function() { 
     var response = confirm('are you stil there?'); 
     if (response === true) { 
      module.resetInactivityIndex(); 
     } 
    }; 

    module.resetInactivityIndex = function() { 
     inactivityIndex = 15; 
     promptIndex = 5; 
    }; 

    module.fireInactivityAlert = function() { 
     alert('Inactivity alert!'); 
    }; 

    module.initialize = function() { 
     module.resetInactivityIndex(); 
     module.startInactivityMonitor(); 
    }; 

    return module; 
})(UserInactivityMonitor || {}); 

設置inactivityIndex到將不活動的事件觸發之前經過的秒數。將promptIndex設置爲當用戶提示他們仍然存在時的剩餘秒數。上面的代碼將不活動超時設置爲15秒,並在剩餘5秒時調用空閒提示。

在頁面加載啓動閒置計時器:

$(function() { 
    UserInactivityMonitor.initialize(); 
}); 

在任何AJAX請求,計數器復位:

$("#fooButton").on('click', function() { 
     $.ajax(
      { 
       url: $("#buttonClickPostUrl").val(), 
       data: { 
        someData: 'data' 
       }, 
       type: 'POST', 
       complete: function() { 
        UserInactivityMonitor.resetInactivityIndex(); 
       } 
      }); 
    }); 

如果服務器正在維護會話狀態,那麼你將要作出的請求返回到服務器以終止會話,並可選擇將瀏覽器引導至事件的適當頁面。您可以在fireInactivityAlert()函數中執行此操作。

+0

你的意思是我必須這樣做'$(document).click(function(){// Call UserInactivityMonitor});'捕獲頁面上的所有點擊事件,並將其視爲一個活動,然後重置計時器? – fiberOptics 2013-02-11 01:27:32

+0

不完全。您是指ajax請求代碼示例還是頁​​面加載示例?每當發生整頁加載(IE,第一次使用請求頁面)時,您想要啓動不活動計時器。頁面加載樣本展示瞭如何使用jQuery來做到這一點。 ajax代碼示例演示瞭如何在ajax請求完成時重置不活動計數器(失敗或不成功),同樣該示例顯示了使用jquery的ajax請求。你將不得不將這個樣本模型化到你現有的代碼庫中。 ajax示例中的外賣是resetInactivityIndex()函數調用。 – Neiliux 2013-02-12 03:08:27