2016-11-22 14 views
0

我在我的js文件包含在我的ASP.NET MVC應用程序的主.cshtml頁以下幾點:後端只能替代javascript定期函數調用?

var ajax_call = function() { 

    $.ajax({ 
     type: "GET", 
     cache: false, 
     url: "/Session/Index/", 
     success: function (result) { 
      if (!(result.length > 0)) { 

       window.location.href = '/Home/Index/' 
      } 

     } 
    }); 


}; 

var interval = 1000 * 60 * .2; // where X is your every X minutes---.2 -> every 12 seconds 

setInterval(ajax_call, interval); 

目的是檢查會話是否仍然有效(SessionController唯一回報結果如果會話處於活動狀態),否則瀏覽器將被重定向到Home/Index,其中HomeController具有全局授權屬性,如果登錄不是有效會話,則該屬性會重定向到登錄頁面。

我的問題是,這是一個有效的方法?它可以工作(如果我用用戶登錄,然後打開一個新窗口並在新窗口中用同一用戶登錄,舊窗口會在不久之後重定向到登錄屏幕,具體取決於它在第12個週期中的位置),但是有沒有辦法在後端完全做這樣的事情?

謝謝。

+0

那麼,你不能強制從後端重定向。但是,您可以將用戶重定向到來自後端的下一個請求的登錄頁面。那不是說授權系統已經可以做什麼了嗎? – David

+0

我一個假設你張貼的在某種程度上餅乾設置「令牌」,後臺驗證模塊應該有某種方式來終止該令牌,(你可以立足於會議的口是心非是expiricy),然後重定向他沒有有效令牌的主頁面不再像「0000」 –

+0

@大衛是的,這就是系統所做的事情,但我試圖通過每12秒執行一次請求來定期執行此操作。基本上,我試圖模擬對後端的請求。 – ITWorker

回答

1

目的是檢查會話是否仍然有效

這不是一個好辦法,因爲到服務器的請求,將休息會話超時爲0這意味着你正在讓會議永遠活着。如果用戶忘記關閉瀏覽器並將計算機保持在打開狀態,其他人仍然可以訪問該帳戶。

這是我在我的網站中使用的方法,受到銀行/信用卡網站的啓發。

默認情況下,會話超時時間爲20分鐘(您可以根據需要調整)。所以,我讓定時器運行在客戶端。當它達到19分鐘時,我會顯示帶有分鐘倒數計時器的彈出消息。

enter image description here

如果使用不關閉彈出,我重定向到註銷頁。

Here是概念和示例代碼,但您不需要使用Telerik控件來實現它。

+0

這種情況稍有不同,但當會話超時時它會很有幫助。我的問題是當他/她從另一個窗口登錄時,在一個窗口中踢出用戶。 – ITWorker

+0

如果是這樣的話,你可以用你原來的做法,因爲在執行AJAX請求時,瀏覽器會話無效。 – Win