2009-04-02 4 views
6

Ich muss Auto-Logout-Funktionalität in einem meiner Projekte implementieren, und ich kann nicht herausfinden, wo ich anfangen soll für die Suche nach Ideen aber SO.Asp.net: Implementieren Auto-Logout-Funktionalität

Was ich brauche ist, dass die Anwendung den Benutzer auf die Anmeldeseite umleitet, wenn die Benutzersitzung abgelaufen ist. Bitte sagen Sie mir, wie ich diese Anforderung angehen sollte.

Problem Statement: Wenn der Benutzer das System für mehr als n Minuten in einer bestimmten Login-Instanz verläßt, sollte das System sie automatisch abmelden.

Antwort

6

:

1) Speichern Sie die Zeitstempel von jeder Anfrage (Server und Ajax mit Ausnahme der Ajax-Request-Sitzung Check) an den Server in eine Sitzung var.

2) Den Server über eine JS-Funktion mit Ajax in kurzen Intervallen abfragen und prüfen, ob der Zeitunterschied zwischen dem Sitzungs-Zeitstempel und der Ajax-Anforderungszeit größer als das Sitzungs-Timeout ist und den aktuellen Benutzer abmeldet Gebe für diese Ajax-Anfrage ein Bool zurück.

3) Die aktuelle Seite auf die Anmeldeseite umleiten, wenn das zurückgegebene Bool wahr ist.

+2

Sie sollten dies als die Antwort markieren, um Leute zu sparen, die Zeit damit verbringen –

1

Lesen Sie die MSDN-Dokumentation auf http://msdn.microsoft.com/en-us/library/ms972429.aspx

+0

Ich weiß, welcher Sitzungsstatus ist Ich möchte nur den Benutzer auf die Anmeldeseite umleiten, wenn es abläuft! – renegadeMind

+0

Sie haben nicht die ganze Seite gelesen, huh! Lesen Sie den Abschnitt "Beispielsitzungsstatusanwendung" im obigen Link. Ändern Sie die 'CheckSession'-Methode, und anstelle der Zeile' span1.InnerHtml = "NICHTS, SESSION DATA LOST!" - fügen Sie Code für die Umleitung zu Ihrer Seite hinzu. – sangupta

0

Da Sie nicht wissen, wo Sie anfangen sollen, können Sie diese 4guys Artikel nützlich: http://www.4guysfromrolla.com/webtech/110701-1.shtml

bearbeiten

wie die jQuery timer Sounds können nützlich, wenn Sie nach Ablauf einer bekannten Zeitspanne (dh während der Ablaufzeit Ihrer Sitzung) auf eine URL umleiten möchten.

Hoffe, das hilft.

+0

ich weiß Authentifizierung funktioniert; Wie wird mir das helfen? Bitte haben Sie Verständnis dafür, dass der Nutzer nicht mit der Seite interagiert und dass die App diese noch immer auf die Anmeldeseite weiterleitet, wenn die Sitzung abläuft! Es wird eine Kundenseite Sache sein! – renegadeMind

+0

Vielleicht überlegen Sie, Ihre Frage neu zu schreiben, um sie für Menschen klarer zu machen, die bereit sind, Zeit damit zu verbringen, Ihnen zu helfen. –

+0

Nun, ich dachte das Wort Auto-Logout war selbsterklärend; Schätze es ist nicht! – renegadeMind

14

Geht auf die Kommentare so viel wie die Frage, ich bin mir nicht sicher, ob Sie nach etwas sind, das den Benutzer nach einer bestimmten Zeit unabhängig von Aktivität oder nur nach einer Zeit der Inaktivität protokolliert.

Wenn Sie gerne den Standard ASP.NET mechanisms zu verwenden, kann dies ohne große Arbeit für Sie erledigt werden:

Ihre membership provider einrichten.

Stellen Sie sicher, dass Ihre authentication section eine loginUrl definiert:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" /> 
</authentication> 

Sie einen Timeout andere als die Standard 30 Minuten eingestellt können die "timeout" -Attribut auf dem forms element mit:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" timeout="15"/> 
</authentication> 

Dies wird log der Benutzer nach 15 Minuten Inaktivität auf Ihrer Website (entweder mit dem Browser geöffnet ohne Javascript "Herzschlag" oder wenn sie 15 Minuten auf einer anderen Website verbringen).

Verweigern des Zugriffs auf anonyme Benutzer

<authorization> 
    <deny users="?" /> 
</authorization> 

dann sicher, dass Ihre Login, Registrierung und möglicherweise vergessen Passwort Seiten für alle Benutzer zugänglich sind, um die location Element:

<location path="Logon.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<location path="Register.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<!-- etc --> 

Auf diese Weise verwenden, wenn eine Authentifizierung des Benutzers cookie läuft ab, sie werden an die URL weitergeleitet, die im loginUrl-Element Ihrer Formularseite angegeben ist.


Wenn Sie nicht die Standard-ASP.NET-Mechanismen verwenden, dann würden Sie wahrscheinlich besser dran, ein „Basis Seite“ Typ-Modell zu implementieren.

Erstellen Sie eine neue Klasse, die von System.Web.UI.Page erbt, die den Anmeldestatus des Benutzers überprüft, und wenn sie nicht angemeldet sind/Zeitüberschreitung, dann leiten Sie sie auf Ihre Anmeldeseite um.

In den Seiten, die gesperrt werden sollen, statt von System.Web.UI.Page zu erben, erben Sie von Ihrer Basis-Seitenklasse (ein Beispiel für diese Art von Setup, etwas Ähnliches zu tun) Seite) in my answer here


Ihre Login-Seite zu sehen sein wird wahrscheinlich müssen einige Rahmen spreng JS in ihm haben aus dem iFrame zu springen zurück:

if (top!=self.parent){ 
    top.location=self.parent.location; 
} 

Oder sagen Sie, dass Sie durch Drücken von "Zurück" Ihre Seiten immer noch durch den Cache des Browsers sehen können? In diesem Fall müssen Sie auf jeder Seite mit den Cache-Header herum spielen werden:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Ok, gut, in diesem Fall müssen Sie auch ein JS-Timer-Objekt einen Ort auszuführen. ersetzen Sie auf Ihre Login-Seite - hat dies in einer Benutzersteuerung auf jeder Seite (oder besser noch, in der Masterseite), um den Benutzer automatisch nach n Minuten zu umleiten:

<script type="text/javascript"> 
    setTimeout('location.Replace("/login.aspx")', 900000); 
</script> 

die Zeit in Millisekunden, so dass dies Verschieben Sie sie in 15 Minuten und brauchen Sie nicht das gesamte jQuery-Framework dafür einzurichten.

Sie könnten auch in den Meta-Refresh-Tag aussehen sollen:

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" /> 

, die den Browser auf die Login-Seite nach 15 Minuten zu aktualisieren zwingen werden (dies ist in Sekunden). Dies wurde durch die folgende Weise erreicht

+0

Das ist mein Prob-Statement: Wenn der Benutzer das System für mehr als n Minuten in einer beliebigen Login-Instanz verlässt, sollte das System sie automatisch abmelden. Es tut mir leid, wenn die Frage nicht korrekt formuliert wurde. – renegadeMind

+0

Wenn Sie die Formularauthentifizierung verwenden, legen Sie das Zeitüberschreitungsattribut auf "n" Minuten fest, und ihr Authentifizierungs-Token wird nach "n" Minuten der Inaktivität ablaufen. Entweder bleibt ein Browserfenster geöffnet oder sie wandern zu dieser Zeit zu einer anderen Website . –

+0

Ich habe einige Details hinzugefügt, um die Einstellung für die Zeitüberschreitung einzuschließen, sowie über die Möglichkeit, die Cache-Header für die Seiten zu ändern. –