2017-09-11 2 views
0

Die folgende Methode meldet den Benutzer nach 15 Minuten ab. Aber das Problem ist, selbst wenn der Benutzer aktiv ist, wird es ihn abmelden.Automatische Abmeldung nach 15 Minuten inaktiven C#

Ich bin auf der Suche nach einer Lösung, dass, wenn Benutzer nicht aktiv ist für volle 15 min die Methode wird es ihn abmelden, außer dass die Methode nicht ausgeführt wird.

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

Jedes Mal, wenn eine Seite ist check für eine Session-Variable, die die Zeit enthält, zu der zuletzt eine Seite navigiert wurde. Wenn es weniger als 15 Minuten ist, aktualisieren Sie diese Sitzungsvariable mit der aktuellen Zeit und ermöglichen Sie dem Benutzer, fortzufahren. Andernfalls nullen Sie die Sitzungsvariable und leiten Sie sie an die Startseite weiter. –

Antwort

1

Statt dies zu tun, mit einem einzigen Timer 15 Minuten ausgeführt wird, wie etwa das Intervall auf 1 Minute einstellen und im Fall einen Zähler runterzählen?

Dieser Zähler könnte leicht durch andere Ereignisse, z.B. AJAX-Aufrufe, Klick-Ereignisse usw., die in jQuery bv .delegate oder .on Methoden leicht ausgelöst werden können.

Wenn keine solchen Rücksetzungen auftreten, erreicht der Countdown 0 und Sie können die Umleitung ausführen.

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); 

Sie können sehen, auf diese Weise ist es einfach, den Zähler inactivityCountdown jederzeit vor es abläuft zurückgesetzt. Vergessen Sie nicht, das Intervall bei der Umleitung zu löschen.

Im folgenden Ausschnitt verwende ich 10 Sekunden statt Minuten für bessere Tests. Geben Sie etwas in das Textfeld ein oder klicken Sie auf die Schaltfläche, um den Countdown zurückzusetzen.

Sie erhalten die Nachricht und dann ein Logout Text, in dem Sie in der Lage über einen Link wieder einzuloggen sein werden (dies simuliert die Umleitung):

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

Toll noch eine Sache, wie kann ich den Zähler Wert in ASP-Label zeigen Dank – Ayman

+0

Nicht sicher, ob ich verstanden habe, was Sie meinen, aber ich habe das Schnipsel ein bisschen so geändert, es zeigt den Countdown auf dem Bildschirm. – Matt

+0

danke für die Hilfe – Ayman

0

So hat die window.setInterval nicht überschrieben bekommen, wie Sie vielleicht denken, es ist. Sie könnten entweder diese Funktion entfernen und lassen Sie Ihren IIS oder etwas damit umgehen, indem Sie es konfigurieren.

oder Sie können nur das Intervall löschen und wieder gesetzt, wie hier gesagt: How do I stop a window.setInterval in javascript?

Verwandte Themen