2010-12-10 9 views
12

Was ist der beste Weg, um einen Benutzer abzumelden, wenn eine Sitzung endet oder abläuft?Abmelden eines Benutzers beim Timeout oder Ende einer Sitzung

Danke für jede Hilfe.

+1

Meinen Sie einfach, dass ein Benutzer nicht authentifiziert wird, oder um den Benutzer tatsächlich auf "Hey, Sie haben eine Zeitüberschreitung!" Umzuleiten. nachdem sie zu lange gewartet haben und ihre Sitzung abgelaufen ist? – Pandincus

+0

Beide wenn möglich? – zSynopsis

+0

Wenn die Sitzung beendet wird, wird die nächste Anforderung, die sie ausführen, nicht authentifiziert. In diesem Fall kann Ihre Seite beim Laden einer neuen Seite nachsehen. Um sie umzuleiten, wenn sie zu lange auf derselben Seite waren, sollten Sie Javascript auf die Seite schreiben, die einen Count-Down-Timer hat, der dem Sitzungszeitlimitwert entspricht. Wenn der Timer auf Nullumleitung trifft, ist die Sitzung ungültig. (Kinda - ein Vorbehalt ist, dass, wenn sie Ihre Website in einem anderen Tab durchsuchen - das wird die Sitzung am Leben erhalten, während die erste Registerkarte Javascript immer noch Countdown) – Prescott

Antwort

11

Es hängt wirklich von der gewünschten Funktionalität, die Sie suchen. Ich gehe davon aus, dass Sie FormsAuthentication verwenden.

Es gibt zwei verschiedene Dinge, die Sie besorgt sein müssen: die Session und die FormsAuthentication Cookie. Wenn ich mich nicht irre, haben beide separate Timeouts.

Wenn das Problem, das Sie haben sind, ist, dass die Sitzung abgelaufen ist, aber der Benutzer immer noch authentifiziert ist, können Sie eine Kombination aus folgendem Versuch:

1: Sicherstellen, dass das Authentifizierungscookie den gleichen Timeout-Wert hat wie die Sitzung:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication> 
<sessionState ... timeout="20" ... /> 

2: In Ihrem Page_Load Fall überprüfen, ob die Sitzung abgelaufen ist:

if (context.Session != null && Context.Session.IsNewSession == true && 
    Page.Request.Headers["Cookie"] != null && 
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) 
{ 
    // session has timed out, log out the user 
    if (Page.Request.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut(); 
    } 
    // redirect to timeout page 
    Page.Response.Redirect("/Timeout.aspx"); 
} 

(Siehe http://www.eggheadcafe.com/articles/20051228.asp für Informationen zum Erkennen eines Sitzungs-Timeouts)

Wenn Sie eine angenehmere Benutzererfahrung wünschen, könnten Sie JavaScript verwenden, um eine Art modales UI-Popup nach X Minuten zu initiieren. Dieses Popup würde es einfach einem Benutzer ermöglichen, einen Button-Klick zu initiieren, der ein AJAX-Postback auf dem Server auslösen würde, wodurch sein Authentifizierungs- und Sitzungscookie verlängert würde, ohne dass die Seite erneut geladen werden muss. Ich habe das vorher noch nie umgesetzt, aber schau, this guy made an ASP.NET AJAX control!

+0

Dank Pandincus – zSynopsis