[PHP] Onlinestatus

  • Hallo,


    ich möchte ein Onlinestatus System auf meiner Seite einbauen. Ich habe bereits dass wenn der Benutzer sich einloggt/registriert dass der Status auf Online gesetzt wird und wenn er sich ausloggt auf Offline. Jedoch möchte ich dass wenn der Benutzer den Tab/Browser schließt, dass sein Status auf Offline gesetzt wird und wenn er die Seite wieder aufruft, auf online gestellt wird.

    ~gez. TonicZ

  • Am einfachsten mit einem Kontinuierlichen Ping (all 5 Minuten oder so) von dem Client Browser auf deinen Server.
    Kommt nach 10 Minuten kein Ping mehr kannst du den Benutzer als Offline ansehen. (Oder er hat NoScript)

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Am einfachsten mit einem Kontinuierlichen Ping (all 5 Minuten oder so) von dem Client Browser auf deinen Server.
    Kommt nach 10 Minuten kein Ping mehr kannst du den Benutzer als Offline ansehen. (Oder er hat NoScript)

    wie genau geht das?
    habe seit gestern aktiv mit php angefangen. kenne mich leider noch nicht so gut aus ^^

    ~gez. TonicZ

  • PHP ist Serverseitig. Wahrscheinlich meint @root mit einem Ping ein Ajax Request, der über einen Timer alle 5min ein Signal an den Server (PHP gibt). NoScript blockt alles, was Javascript ist, somit also auch Ajax Requests.
    Serverseitig lässt du einen Timer rüberlaufen, der zB alle 30Sekunden oder so den Status checkt. Hat jemand keinen AhaxRequest mehr gesendet, bzw. befindet sich dadurch nicht mehr im OnlineArray, setzt du dessen Status als offline. Oder nimmst gleich alle Spieler im OnlineArray und gibst diese aus. So brauchst du auch Serverseitig nichts mit MySQL handhaben

  • Ja @Alf21 bringt es ziemlich auf den Punkt.


    Du kannst natürlich dir den Server seitigen Timer sparen und bei jedem "Ping" egal von welchem Browser löscht du die Leute raus die seit X Minuten nicht mehr geantwortet haben.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Eine andere aber ziemlich ähnliche Herangehensweise.
    Jedes Mal wenn du die Daten des Users fetcht, setzt du einen "last_activity_timestamp" und dann schaust du ob der aktuelle Timestamp, 3 Minuten Differenzen hat. Und somit ist er online oder offline

  • Eine andere aber ziemlich ähnliche Herangehensweise.
    Jedes Mal wenn du die Daten des Users fetcht, setzt du einen "last_activity_timestamp" und dann schaust du ob der aktuelle Timestamp, 3 Minuten Differenzen hat. Und somit ist er online oder offline

    Wäre natürlich auch einfacher. WoltLab nutzt dies in der Art glaub sogar so, für ihre Systeme.

  • Es ist nicht nur einfacher, sondern auch performanter :) bzw. weniger Last für den Server, da er nur einen Request verarbeitet. Bei < 100 Usern sollte das zu keinen Performance Problemen führen, höhere Nutzerzahlen könnten allerdings bereits einiges an Last auf dem Server erzeugen (bei der Herangehensweise per AJAX Request)

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Jetzt kommt es aber darauf an, wie seine Datenstruktur ist. Wenn ich beispielsweise einen Beitrag für über 3 Minuten lese, würde ich bei eurem Beispiel als offline markiert werden, da ich keine neuen Daten abfrage (Wenn er nichts im Hintergrund (sind wir wieder bei Ajax) macht)...

  • Ich denke es kommt immer auf den Use Case drauf an, bzw wie genau und aktuell diese Anzeige sein soll.
    Für ein Forum würde auch die Methode von @xGreekz7x völlig ausreichen.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2