überprüfen: Ist die Website (noch) im Webbrowser geöffnet?
lima-city → Forum → Die eigene Homepage → Homepage Allgemein
ansatz
ausprobieren
berechnung
datenbank
datensatz
fenster
gespeicherten zeitstempel
hintergrund
http
nehmen
nutzen
nutzer
person
sekunde
senden
server
signal
textdatei
url
variante verwenden
-
Wie kann ich serverseitig überprüfen, ob in einem Webbrowser die (noch) Webseite offen ist, d. h. der Nutzer noch online ist?
Wie kann ich serverseitig überprüfen, ob ein Client (identifizierbar über SESSION) noch auf einer Website ist, d. h. der Browser noch geöffnet ist, und es dann auf der gleichen Website anzeigen (beispielsweise in einem Web-Chat).
Mein Ansatz ist, dass jeder Webbrowser im Hintergrund clientseitig ein Javascript regelmäßig (2-Sek.-Interval) ausführt, welches per AJAX ein PHP-Script aufruft.
Dieses PHP-Script identifiziert serverseitig den Client und speichert ihn und den aktuellen Unix-Timestamp auf dem Server ab (Textdatei, Datenbank, etc.).
Währenddessen fragt ein anderes clientseitiges Javascript (welches ebenfalls jeder Webbrowser ausführt) via AJAX ein PHP-Script ab, welches
für jeden identifizierten Client den gespeicherten Zeitstempel mit dem aktuellen abgleicht und falls er höchstens zwei Sekunden abweicht, zurück meldet, dass der User online sei (und andernfalls den Datensatz löscht, sodass er nicht jedes mal wieder überprüft wird).
Aber ist das der richtige/professionelle Weg?
Schließlich ist er ziemlich Ressourcen-fressend.
Es gibt bestimmt eine allgemein bekannte Lösung (wie wird's beispielsweise hier in lima-city gemacht?)...
Wie würdet ihr's machen? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Vom Prinzip her klingt der Ansatz für mich ganz gut. Die "Berechnung" wer noch online ist, würde ich aber Serverseitig machen. Um Resourcen zu sparen, würde ich das Intervall in dem der Client sich als online meldet vergrößern. Zudem sollte die Zeit die vergehen muss, bis ein User als offline angezeigt wird (deutlich) größer sein als besagtes Intervall, denn sonst könnten Verzögerungen (z.B. wegen schlechtem Wlan-Empfangs) zu ständigem Wechseln des Status (online/offline) führen.
-
Danke.
Mit dem vergrößerten Interval muss ich ausprobieren... Ich hab' jetzt erst mal nur 'n Beispiel gegeben.
Allerdings handelt es sich um 'nen Chat, weswegen es wahrscheinlich schon eher besser ist, möglichst zeitnah zu erfahren, wann der Gesprächspartner raus ist. Wie gesagt: Muss ich ausprobieren. An das mit der Verzögerung hatte ich auch schon gedacht...
Aber das was du mit der Berechnung meintest, wollte ich auch so machen, dass das serverseitig ist, d. h. noch im PHP-Skript, sodass dieses dann nur die Nutzer zurück gibt, die die Website noch offen haben... -
ggamee schrieb:
Als Fallback solltest du trotzdem unbedingt das Timeout verwenden.
Du könntest auch ein HTML unload Event nutzen, um mit dieser per AJAX dann ein Signal zu senden, dass deine Person des Fenster geschlossen hat.
http://www.w3schools.com/jsref/event_onunload.asp
rednaz schrieb:
Mein Ansatz ist, dass jeder Webbrowser im Hintergrund clientseitig ein Javascript regelmäßig (2-Sek.-Interval) ausführt, welches per AJAX ein PHP-Script aufruft.
Dieses PHP-Script identifiziert serverseitig den Client und speichert ihn und den aktuellen Unix-Timestamp auf dem Server ab (Textdatei, Datenbank, etc.).
Währenddessen fragt ein anderes clientseitiges Javascript (welches ebenfalls jeder Webbrowser ausführt) via AJAX ein PHP-Script ab, welches
für jeden identifizierten Client den gespeicherten Zeitstempel mit dem aktuellen abgleicht und falls er höchstens zwei Sekunden abweicht, zurück meldet, dass der User online sei (und andernfalls den Datensatz löscht, sodass er nicht jedes mal wieder überprüft wird).
Die Anzahl der aktiven Benutzer kannst du dir gleich in dem AJAX-Request zurückgeben lassen, mit dem du dem Server mitteilst, dass der Client noch online ist.
Als Zeitintervall würde ich mindestens 15 Sekunden nehmen, als Timeout (also wenn der Client so lange nicht reagiert) würde ich 60 - 90 Sekunden nehmen.
Damit verursachst du keine nennenswerte Last, trotzdem ist das ganze noch halbwegs genau.
Die Variante mit onunload würde ich parallel zur Timeout-Variante verwenden. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage