Hintergrund: Ich erstelle eine sehr einfache Chatroom-ähnliche ASP.NET-Seite mit C # -Code-Behind. Die aktuellen Benutzer / Chat-Nachrichten werden in den Steuerelementen angezeigt, die sich in einem AJAX-Update-Panel befinden, und sie verwenden einen Timer - sie rufen alle paar Sekunden Informationen aus einem DB ab.
Ich versuche, einen einfachen Weg zu finden, den Status eines Benutzers auf "Offline" zu setzen, wenn sie ihren Browser verlassen, anstatt auf die Schaltfläche "Abmelden" zu klicken. Der Status "Offline" ist derzeit nur 1 Char (y / n) für IsOnline.
Bisher habe ich window.onbeforeunload mit Javascript untersucht und eine versteckte Formularvariable mit einer Funktion für dieses Event gesetzt - & gt; Natürlich ist das Problem, ich müsste diese versteckte Formularvariable immer noch in meinem Code-Behind irgendwo testen, um die letzte serverseitige Datenbankabfrage durchzuführen, wodurch der Benutzer effektiv offline gestellt wird.
Ich könnte dieses wahrscheinliche einfache Problem völlig verstümmeln! und natürlich würde ich mich über ganz andere alternative Vorschläge freuen.
Danke
Ich vermute, Sie bellen den falschen Baum an. Denken Sie daran, es ist möglich, dass der Benutzer plötzlich seine Internetverbindung verliert, der Browser abstürzt oder den Computer mit dem großen roten Schalter ausschaltet. Es wird Fälle geben, in denen der Server einfach nie wieder vom Browser hört.
Der beste Weg, dies zu tun, ist mit einem "Dead Man Switch". Da Sie angegeben haben, dass sie alle paar Sekunden Informationen aus der Datenbank abrufen, verwenden Sie diese Gelegenheit, um (in der Datenbank) einen Zeitstempel für das letzte Mal zu speichern, das Sie von einem bestimmten Client gehört haben.
Führen Sie jede Minute auf dem Server eine Abfrage durch, um nach Clients zu suchen, die einige Minuten nicht abgefragt wurden, und setzen Sie den Benutzer offline ... alle auf dem Server.
Javascript kann nicht zuverlässig sein, weil ich meinen Browser schließen kann, indem ich es abbringe.
Eine zuverlässigere Methode könnte darin bestehen, periodische Nachrichten vom Server an den Server zu senden und den Status zu ändern, wenn der Server diese Meldungen nicht mehr empfängt.
Ich kann Joel hier nur zustimmen. ist keine zuverlässige Methode, um zu wissen, wann der HTTP-Agent die Konversation beenden möchte.
Tags und Links c# asp.net onbeforeunload