簡體   English   中英

非活動 c# 15 分鍾后自動注銷

[英]Auto Logout after 15 minutes of inactive c#

下面的方法會在 15 分鍾后注銷用戶。但問題是即使用戶處於活動狀態,它也會將他注銷。

我正在尋找解決方案,當用戶在 15 分鍾內未處於活動狀態時,該方法會將他注銷,而不是該方法不會運行。

public void AutoRedirect()
{
    int int_MilliSecondsTimeOut = (this.Session.Timeout * 900000);
    string str_Script = @"
    <script type='text/javascript'> 
    intervalset = window.setInterval('Redirect()'," + int_MilliSecondsTimeOut.ToString() + @");
    function Redirect()
     {
       alert('Your session has been expired and system redirects to login page now.!\n\n');
       window.location.href='../index.aspx'; 
     }
    </script>";
    UtilityClass.RemoveCookie("login", Response);
    ClientScript.RegisterClientScriptBlock(this.GetType(), "Redirect", str_Script);
}

與其使用一個運行 15 分鍾的單個計時器來執行此操作,不如將時間間隔設置為 1 分鍾並在事件中倒計時計數器?

這個計數器可以很容易地被其他事件重置,例如 AJAX 調用、點擊事件等,這些事件可以在 jQuery bv .delegate.on方法中輕松觸發。

如果沒有發生此類重置,則倒計時將達到 0,您可以進行重定向。

var inactivityCountdown = 15;

intervalid = window.setInterval(function Redirect()
 {
   inactivityCountdown--; 
   if (inactivityCountdown<1) {
    clearInterval(intervalid);
    alert('Your session has been expired and system redirects to login page now.!\n\n');
    window.location.href='../index.aspx'; 
   }
 }, 60*1000);

您可以看到,這樣很容易在計數器到期之前的任何時間重置計數器inactivityCountdown 執行重定向時不要忘記清除間隔。

在下面的代碼段中,我使用 10 秒而不是幾分鍾來進行更好的測試。 在文本字段中輸入內容或單擊按鈕以重置倒計時。

您將收到消息,然后是注銷文本,您可以在其中通過鏈接再次登錄(這模擬了重定向):

 var initCountdownValue = 10; var inactivityCountdown = initCountdownValue; $(document).ready(function() { $(document).delegate("#login", "click", function(e) { location.reload(); }); function Logout() { document.getElementById('mainpage').style.display = "none"; document.getElementById('loggedout').style.display = ""; // or window.location.href="/logout.aspx"; } var intervalid = window.setInterval(function Redirect() { inactivityCountdown--; $("#counter").text(inactivityCountdown.toString()); if (inactivityCountdown < 1) { clearInterval(intervalid); Logout(); alert('Your session has been expired and system redirects to login page now.!'); } }, 1 * 1000); $(document).delegate(":input", "click change keydown", function() { inactivityCountdown = initCountdownValue; }); });
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> </script> <div id="mainpage" style=""> <input type="text"></input> <input type="button" text="test"></input> <div> Counter: <div id="counter"></div> </div> </div> <div id="loggedout" style="display:none"> You are logged out. To login, click <a id="login" href="#">here</a> </div>

當然,在生產環境中,您將刪除警報並將用戶重定向到注銷頁面。 這僅用於演示目的。

所以window.setInterval不會像你想象的那樣被覆蓋。 您可以刪除此功能並讓您的 IIS 或其他東西通過配置來處理它。

或者您可以清除間隔並重新設置,如下所述: 如何在javascript中停止window.setInterval?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM