Ausführung der serverseitigen Funktion beim Schließen des Browsers

7

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

    
Jeff Dalley 10.02.2009, 03:48
quelle

3 Antworten

15

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.

    
Joel Spolsky 10.02.2009, 03:54
quelle
2

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.

    
ChrisW 10.02.2009 03:55
quelle
2

Ich kann Joel hier nur zustimmen. ist keine zuverlässige Methode, um zu wissen, wann der HTTP-Agent die Konversation beenden möchte.

    
Franci Penov 10.02.2009 04:00
quelle

Tags und Links