12 Stimmen

Wie behandelt man das Sitzungsende in global.asax?

Ich arbeite an einer Chat-Anwendung, ich habe HashTable verwendet, um Benutzer und Operator als Schlüssel und ein Objekt der Klasse ChatRoom als Wert der HashTable zu enthalten. Das Hauptproblem ist, dass wenn Benutzer oder Operator den Browser schließen oder ohne Abmeldung getrennt werden, sie automatisch am Ende der Sitzung abgemeldet werden.

Bitte helfen Sie mir dabei und wie man Global.asax in dieser Angelegenheit verwendet.

32voto

Canavar Punkte 46926

Sie können das Sitzungsende-Ereignis von global.asax verwenden, um den unerwartet getrennten Benutzer zu entfernen:

void Session_End(Object sender, EventArgs E) {
    // Sitzungsressourcen aufräumen
}

Aber Vorsicht, die Sitzung endet nicht, wenn der Benutzer seinen Browser schließt oder seine Verbindung verliert. Sie endet, wenn die Sitzungstimeout erreicht ist.

16voto

MartinHN Punkte 19032

Fügen Sie eine Global.asax-Datei zu Ihrer Website hinzu, und im Session_End-Ereignis entfernen Sie den Benutzer aus Ihrer HashTable.

protected void Session_End(Object sender, EventArgs e)
{
    // Benutzer aus der HashTable entfernen
}

7voto

Guffa Punkte 663241

Das Session_End-Ereignis wird nicht ausgelöst, wenn der Browser geschlossen wird, sondern wenn der Server innerhalb eines bestimmten Zeitraums (standardmäßig 20 Minuten) keine Anfrage vom Benutzer erhalten hat. Das bedeutet, dass Benutzer, die durch Session_End entfernt werden sollen, nach dem Schließen des Browsers weitere 20 Minuten im Chat bleiben werden.

Ich schlage vor, dass Sie die Zeit der letzten Anfrage im Benutzerobjekt behalten. Auf diese Weise können Sie feststellen, wie aktiv der Benutzer ist und wie wahrscheinlich es ist, dass der Benutzer den Chat verlassen hat. Zum Beispiel können Sie jeden Benutzer als inaktiv markieren, der zwei Minuten lang nichts getan hat.

Sie können die Chat-Anwendung auch periodisch den Server abfragen lassen (wenn Sie dies nicht bereits tun). Dadurch wird die Zeit der letzten Anfrage im Objekt aktualisiert und der Benutzer bleibt so lange aktiv, wie das Chat-Fenster geöffnet ist.

Sie können das onunload-Ereignis im Browser verwenden, um eine Abmeldeanfrage an den Server zu senden, wenn der Benutzer die Seite verlässt. Dies funktioniert natürlich nur, wenn der Benutzer noch über eine Netzwerkverbindung verfügt. Das onunload-Ereignis wird auch beim Neuladen der Seite ausgelöst, sodass Sie auswerten müssen, warum das Ereignis ausgelöst wird, um es verwenden zu können.

1voto

yunus Punkte 11

Sie können JavaScript verwenden, das immer auf dem Client läuft, um ein Signal an den Server zu senden - wie "Ich bin hier". Wenn das nächste Signal nicht eintrifft, können Sie Leave(); aufrufen. Ich habe AJAX verwendet, um dies zu tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X