Umleitung auf eine andere Seite beim Session_end Event

8

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?

    
s.k.paul 02.09.2013, 04:44
quelle

7 Antworten

6

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 :

%Vor%     
NiKiZe 02.09.2013, 04:57
quelle
3

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.

    
Husein Roncevic 02.09.2013 04:53
quelle
1

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?

    
Derek R 29.10.2013 10:08
quelle
0

Ich denke, Sie bekommen "Antwort ist in diesem Kontext nicht verfügbar", weil der Benutzer keine Anfrage an den Server stellt und Sie ihm deshalb keine Antwort geben können. Versuchen Sie stattdessen Server.Transfer.

    
Zerkey 02.09.2013 04:47
quelle
0

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.

    
R.C 02.09.2013 05:38
quelle
0

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.

    
Surbhi 25.03.2015 15:56
quelle
0

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.

%Vor%

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.

    
AVS 18.05.2016 07:13
quelle

Tags und Links