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.