Frage

Ich frage mich, ob ich ein Session-Timeout-Ereignis behandeln kann. Ich brauche eine Funktion aufrufen, um meine Funktion richtig zu machen, bevor Sitzung Timeouts oder Benutzer meiner Seite links oder geschlossene Browser-Fenster. Der wichtigste Teil ist hier Zugriff auf alles, was während der Sitzung, Session-Variablen gespeichert haben.

War es hilfreich?

Lösung

Werfen Sie einen Blick auf die Session_End () -Methode in global.asax. Die global.asax-Datei sollte bereits verdrahtet sein, um diese Methode aufrufen, wenn die Sitzung beendet. Sie können dort setzen Sie Ihren Code nur in immer Sie möchten.

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Fires when the session ends
    End Sub

Natürlich sollten Sie beachten, dass die Sitzung vollständig eine serverseitige Sache. Es wird erst nach X Minuten Inaktivität Ende (20 Minuten ist die Standardeinstellung). Es wird nicht das sofortige Ende der Benutzer das Fenster schließt. ASP.NET hat keine Kenntnis von einem Benutzer ein Fenster zu schließen oder Ihrer Seite zu verlassen.

Und in der Tat, es ist schwierig, zu versuchen, eine unmittelbare Wirkung auf den serverseitige auszuführen, wenn dies geschieht. Ich meine, es ist einfach in Javascript rufen window.onbeforeunload und bestätigt Feld bringen, bevor der Benutzer das Fenster schließt. Aber wenn Sie versuchen, sofort ein Paket an den Server zu senden, bevor das Fenster tatsächlich geschlossen wird, ich glaube, Sie werden feststellen, dass es eine schwierige Aufgabe wird dies alles benutzerfreundlich zu machen. Sie könnten einige Javascript schreiben, die eine Nachricht an den Server unter Verwendung von AJAX sendet, die den Server benachrichtigt, dass der Benutzer den Browser schließt, und dann mehr verwenden Javascript um den Browser zu schließen, nachdem die Nachricht gesendet wurde. Aber dann wird der Benutzer die lästige Meldung erhalten (in den meisten Browsern) besagt, dass ein Skript, das Fenster zu schließen versucht. Dies wird sich sehr Amateur-ish an den Benutzer und kann sie zweimal überlegen, um zurückzukommen.

Also, wenn Sie bereit sind, mit einer Verzögerung zu setzen, würde ich nur dieses ganze Chaos Javascript vermeiden vollständig und stützen sich auf eine rein serverseitige Lösung mit Session_End (). Nach allem, wenn ein Benutzer schließt das Fenster oder Blätter, ASP.NET wird schließlich Hinweis, weil die Sitzung Timeout.

Andere Tipps

Session_End wird die Sitzung Auszeit Problem behandeln. Dies wird jedoch nicht ausgelöst, wenn der Benutzer den Browser oder bewegt sich auf eine andere URL schließt. Er wartet, bis die Session-Timeout abgelaufen ist.

Um die anderen Bedingungen zu erfassen, müssen Sie Javascript auf dem Client verwenden. Allerdings sind diese Methoden nicht immer zuverlässig je nach Browser / Version, etc. Auch wenn der Computer des Benutzers heruntergefahren, unplugged werden, oder sie ansonsten völlig dieses Skript weggehen wird nicht ausgelöst.

Sie könnten auch andere Alternativen in Betracht ziehen. Was genau sind Sie mit dieser Funktion zu erreichen versuchen?

Das Web ist staatenlos so dass Sie nicht wissen, ob der Benutzer das Browserfenster geschlossen hat. Sie können das ‚Session_End‘ Ereignis in der Datei global.asax für Session Timeouts verwenden. Wenn Sie Zugang zu allen Sitzungen wollen, können Sie sie in einer Sammlung speichern über das ‚Session_Start‘ Ereignis, auch in der globalen Datei ..

Edit: Wenn Sie die nahe bei einer Seite mit Javascript abfangen wollen, gehen Sie wie folgt (beachten Sie, das ist unzuverlässig):

window.onbeforeunload = closeIt;

function closeIt(){ 


  return "You have unsaved changes. Are you sure you want to leave this page?";

}

Sie können eine Basepage haben, die von jedem aspx Seite und in der Basisseite init Ereignis überprüfen für eine Session-Variable für nichts nur vererbt wird. Wenn es nichts, dann bedeutet das Sitzung abgelaufen ist und Sie können Benutzer auf eine Anmeldeseite umgeleitet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top