2015-10-14 16 views
0

在我的ASP.NET項目中,我使用「進程內」會話狀態的會話管理和當前的過期時間設置爲 -ASP.NET「是InProc」超時 - 在年底執行JavaScript代碼

 <sessionState mode="InProc" timeout="1" ></sessionState> 

即會話超時是1分鐘。

在「空閒」1分鐘結束時,應用程序被重定向到會話過期的視圖或頁面。

在這個重定向發生之前,我想在同一個控制器上下文中執行一些javascript代碼。這裏的另一個要點是會話過期代碼除了框架的內置機制之外,還從其他地方調用。

我試着創建一個javascript'poll'函數來檢查會話超時,然後在會話失效時執行一些操作,但是這樣做是在每次xhr調用時都會重新驗證會話。

基本思想是通過某種機制向JavaScript代碼通知會話超時。代碼庫是一個現有的代碼庫,對於像我這樣的新開發的.NET開發人員來說,它是相當大的。

任何幫助表示讚賞。

+0

如果您在當前會話時間內與服務器進行任何交互,該會話將始終進一步擴展。這一切都必須在客戶端沒有任何電話到服務器 – haraman

+1

看看['onbeforeunload'事件](http://www.w3schools.com/jsref/event_onbeforeunload.asp)。這可能是你需要的。 –

+0

@haraman - 你是對的。任何對服務器的調用都會延長會話。爲了在客戶端完成這一切,我必須在客戶端引入一個「空閒」檢查邏輯,這與服務器已經在做的事情不同。不知道這是否是正確的解決方案。 – FrailWords

回答

0

我用下面的方法來警告用戶20分鐘的會話超時前2分鐘,使他們能夠保存他們的工作,並繼續2分鐘否則他們的更改將丟失

<script type = "text/javascript"> 
var sessionTimeoutWarning = 18; 
var sessionTimeout = '<%= Session.Timeout %>'; 
var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000; 
setTimeout('SessionWarning()', sTimeout); 

function SessionWarning() { 
    var message = "Your current session will expire in " + (parseInt(sessionTimeout) - parseInt(sessionTimeoutWarning)) + " mins!\nPlease Save any unsaved changes before the session expires"; 
    var userid = '<%= Session("User_ID") %>'; 
    if (userid == '') {} else { 
    if (parseInt(userid) > 0) { 
     alert(message); 
    } 
    } 
} 
</script> 

它的內ASP.NET web表單應用程序,上面的腳本塊已經被插入到一個母版頁上,並在所有子頁面中可用。

Session("User_ID")是變量後面的代碼,它存儲當前登錄的用戶ID,該用戶的ID必須是正的非零整數。邏輯是,如果它是空的,零或非正面的,不要顯示消息。

+0

我想我的問題並不清楚,但這裏提到的超時是'空閒'超時。您提到的方法可能會導致嚴重超時。 – FrailWords

+0

你能解釋什麼是'空閒'超時? – haraman

+0

'空閒'超時是指在沒有與運行應用程序的瀏覽器進行交互時(無論是通過鼠標還是鍵盤) - 基本上用戶交互一段時間。 – FrailWords