Ich möchte automatisch auf die Anmeldeseite umleiten, wenn die Sitzung ausläuft.
In der Datei web.config habe ich den folgenden Code
%Vor%In der Datei Global.asax -
%Vor%Aber nach dem Timeout erhalte ich den folgenden Fehler:
HttpException wurde von Benutzercode nicht behandelt.
Antwort ist in diesem Kontext nicht verfügbar.
Irgendwelche Anhaltspunkte, um dieses Problem zu lösen?
Session_End wird aufgerufen, wenn die Sitzung endet - normalerweise 20 Minuten nach der letzten Anfrage (z. B. wenn der Browser inaktiv oder geschlossen ist).
Da es keine Anfrage gibt, gibt es auch keine Antwort.
Ich würde eine Umleitung in Application_AcquireRequestState
empfehlen, wenn es keine aktive Sitzung gibt. Denken Sie daran, Schleifen zu vermeiden, indem Sie die aktuelle URL überprüfen.
Bearbeiten: Ich bin kein Fan von .Nets integrierte Authentifizierung, Beispiel geht in Global.asax
:
Wenn Sie etwas wie FormsAuthentication
verwenden, um die Sicherheit Ihrer Anwendung zu erhalten, wird dieser Teil (der Teil, den Sie versuchen zu tun) für Sie erledigt. Wenn FormsAuthentication feststellt, dass die Sitzung eines Benutzers abgelaufen ist, wird sie auf die Anmeldeseite umgeleitet.
Zweitens: Verlassen Sie sich nicht zu sehr auf Session_End
, da niemals ausgelöst wird , wenn Sie den Sitzungsanbieter von InProc in SQLServer ändern oder einen anderen Anbieter außerhalb des Prozesses.
Sie sollten Application_AcquireRequestState verwenden Sie werden feststellen, dass Application_AuthenticateRequest keinen Sitzungskontext mehr hat (oder nie einen hatte). In meiner Recherche dazu habe ich diesen Beitrag durchgelesen, der ihn für mich gelöst hat. Vielen Dank an Waqas Raja.
asp.net: Wohin mit Code, um Benutzer ohne eine Sitzung auf die Homepage umzuleiten?
Sie können die Sitzungseigenschaft IsNewSession
verwenden, um festzustellen, ob es sich um ein Sitzungszeitlimit handelt oder nicht.
Die Klasse ASP.NET HttpSessionState
hat die Methode IsNewSession()
, die true
zurückgibt, wenn für diese Anforderung eine neue Sitzung erstellt wurde. Der Schlüssel zum Erkennen eines Sitzungszeitlimits besteht darin, in der Anforderung auch nach dem ASP.NET_SessionId
-Cookie zu suchen.
Definitiv stimme ich auch zu, dass wir den unten stehenden Code in eine so genannte benutzerdefinierte BasePage einfügen sollten, die von allen Seiten verwendet wird, um dies effektiv zu implementieren.
%Vor%Weitere Informationen finden Sie in diesem Link , wenn Sie den obigen Code in eine Basisseitenklasse einfügen möchten.
Sie können einfach Folgendes in web.config
tun %Vor%Da wir von Session_End nicht weiterleiten können, da dort keine Antwort / Weiterleitung vorhanden ist. Wenn Sie dies verwenden, werden Sie zum Zielurl weitergeleitet, wenn die Sitzung eine Zeitüberschreitung hat. Das hilft.
Der einfachste Weg, was ich fühle, ist Meta-Informationen zu verwenden und den Trick zum Laufen zu bringen. Stellen Sie sich vor, wir haben eine Seite WebPage.aspx
fügen Sie den folgenden Code in der WebPage.aspx.cs
-Datei hinzu.
Im obigen Code wird WebPage.aspx
nach 5 Sekunden aktualisiert, sobald die Sitzung abgelaufen ist. Und beim Laden der Seite wird die Sitzung validiert, da die Sitzung nicht mehr gültig ist. Die Seite wird zur Seite "Neu anmelden" weitergeleitet. Jedes Post-Back auf den Server aktualisiert die Sitzung und das gleiche wird in den Meta-Informationen von WebPage.aspx
aktualisiert.