2017-09-11 107 views
0

下面的方法在15分鐘後註銷用戶。但問題是即使用戶處於活動狀態,它也會將他註銷。15分鐘後自動註銷c#

我正在尋找解決方案,當用戶不是活動整整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); 
} 
+0

每次頁面稱爲檢查會話var包含頁面上次導航到的時間。如果少於15分鐘,則使用當前時間更新該會話變量並允許用戶繼續。否則,將會話變量清空並將其重定向到主頁。 –

回答

1

,而不是與一個單定時器運行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>

+0

偉大的一件事我怎樣才能顯示在ASP標籤的計數器值謝謝 – Ayman

+0

不知道如果我明白你的意思,但我已修改了片段,所以它顯示在屏幕上的倒計時。 – Matt

+0

感謝您的幫助 – Ayman

0

因此,window.setInterval不會像您認爲的那樣被覆蓋。 你可以刪除這個函數,讓你的IIS或通過配置來處理它。

或者你可以清除的時間間隔,並重新設置它,在這裏說: How do I stop a window.setInterval in javascript?