2009-02-10 13 views
7

Hintergrund: Ich erstellen eine sehr einfache chatroom-like 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.Ausführen serverseitige Funktion als Browser schließt

Ich versuche eine einfache Möglichkeit 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.

Bis jetzt habe ich in window.onbeforeunload mit Javascript gesucht, eine versteckte Formularvariable mit einer Funktion für dieses Ereignis -> Natürlich ist das Problem, ich würde immer noch diese versteckte Formularvariable in meinem Code testen müssen- Irgendwo hinter der endgültigen Server-seitigen Datenbankabfrage, um den Benutzer effektiv offline zu setzen.

Ich kann dieses wahrscheinlich einfache Problem völlig verstopfen! und natürlich würde ich mich über ganz andere alternative Vorschläge freuen.

Danke

Antwort

15

Ich vermute, dass Sie den falschen Baum bellen. 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 "Totmann-Schalter." 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.

Jede Minute oder so, auf dem Server, eine Abfrage zu finden, die Kunden, die nicht für ein paar Minuten abgefragt haben, und setzen Sie den Benutzer offline ... alle auf dem Server.

+0

Danke Joel, dein Vorschlag macht sehr viel Sinn. Hättest du einen Vorschlag für einen guten Ausgangspunkt, um diese On-Server-Umfrage durchzuführen, um Benutzer offline zu überprüfen/einzustellen - ich habe noch nie so etwas getan, obwohl es so einfach klingt. –

+0

wahrscheinlich eine andere Frage wert ... "wie periodische Prozesse auf asp.net-Server laufen" ... –

+0

Danke! Ich werde das bald schreiben - Schätze es. –

2

Javascript kann nicht zuverlässig sein, weil ich meinen Browser schließen kann, indem ich es abbringe.

Eine zuverlässigere Methode könnte sein, periodische Meldungen "Hallo ich bin immer noch am Leben" vom Browser an den Server zu senden und den Server den Status ändern zu lassen, wenn er diese Nachrichten nicht mehr empfängt.

2

Ich kann Joel hier nur zustimmen. Dort ist keine zuverlässige Möglichkeit für Sie zu wissen, wann der HTTP-Agent die Konversation beenden möchte.

Verwandte Themen