• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

serverseitig überprüfen: Ist die Website (noch) geöffent?

rednaZ

Neues Mitglied
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 auf html.de gemacht?)... Wie würdet ihr's machen?
 
Spontan würde ich es auch so machen. Wobei die Zeit von 2 Sekunden extrem ist. Ich würde eher 30 Sekunden nehmen.

Was ich nicht machen würde ist, dieses Topic in mehreren Bereichen des Forums zu eröffnen. Bitte nicht nochmal, danke.
 
man kann es auch mit einem Bash script oder Batch Script machen :D....

Je nach dem, willst du wissen ob eine Verbindung besteht? oder willst du nur wissen welche Seite angeschaut wird? Willst du das Speichern oder nur kurz anzeigen? ....


Es gibt viele wege ... nehme den, der dir am besten gefällt.
 
>"Je nach dem, willst du wissen ob eine Verbindung besteht? oder willst du nur wissen welche Seite angeschaut wird?" Es gibt nur eine Website und ich will wissen ob ein bestimmter Client sie noch offen hat... Ich will es auch nur anzeigen, aber eben auch bei anderen Clients, weswegen es zwangsweise auf dem Server gespeichert werden muss.
 
Die Abfrage ob eine Sitzung noch aktiv ist kann nur per JavaScript geschehen. Dadurch schickt der Client des Besuchers regelmäßig eine Info an den Server, dass er noch da ist. Das muss dann natürlich serverseitig gespeichert werden oder was auch immer Du mit der Info anfangen willst. Aber die Hauptaufgabe dieser Funktion übernimmt aber JavaScript.

Ausnahme wäre, wenn Du eine Webseite hättest deren Interaktion des Nutzers nicht mittels HTML, CSS und/oder JavaScript erreicht wird. Bei einer reinen Flash- oder Java-Seite ginge es sicher auch anders.
 
Es gibt wie gesagt mehere möglichkeiten:

1) Javascript Funktion die immer einen Status sendet.
2) Einen Bash oder bei windows Batch Script, dass die TCP Verbindung am Port 80 bzw. bei einem Tomcat Web-Server 8080 überwacht.

Such dir ein aus :D

Jedes hat vor und nachteile....
1) Vorteil: einfach zu handhaben und schnell realiesiert
1) Nachteil: Clientseitig und wenn jemand JS deaktiviert hat witzlos

2) Vorteil: Serverseitig und kann nicht einfach deaktiviert werden.
2) Nachteil: Zieht etwas mehr Serverlast, was jedoch minimal ist (je nach auwändigkeit des Scripts). Erfordert Bash bzw. Batch kenntnisse.




Edit: um deine Frage zu beantworten ob das mit SESSION realiesiert werden kann, ein klares nein.
Warum?

SESSIONS werden erstellt mit start_session(); und beendet bzw. zerstört mit session_destroy();. Jedoch wie willst du es machen, dass wenn jemand die Seite verlässt, das session_destroy(); aufgerufen wird? Beim logout wäre es kein Problem, jedoch beim Browser schließen oder beim ändern der URL kann man keine Funktion aufrufen oder dies abfragen.
 
Zurück
Oben