[PHP / Javascript] Ist ein User Online? [Help]

  • Guten Tag

    Ich arbeite Momentan an einem Privaten Projekt das nichts mit Habbo zu tun hat. Jedoch komme ich an einer Sache nicht weiter und möchte euch mal Fragen, ob jemand mir eine Lösung hätte.

    Um was geht es?
    Ich möchte gerne, dass man sieht ob ein User Online ist oder Offline. Also, dass man sieht ob der jeweilige User die Seite offen hat oder nicht.
    Ähnlich wie im Habbo, dass man sieht welcher Freund auch gleichzeitig im Client online ist, und sobald der ihn schliesst, wird er als Offline angezeigt.

    Meine Ideen
    Ich habe einiges versucht aber hab die Lösung noch nicht gefunden. Ich hab versucht, dass ich in Javascript eine Funktion aufrufe, sobald man auf der Seite ist. Die Funktion ist ein Zähler der jede Sekunde 1 Hochzählt. Ist das nicht mehr der Fall(Zähler stehen geblieben), so bedeutet dies, der Benutzer ist nicht mehr auf meiner Seite und kann ausgeloggt werden.(Als Offline angezeigt). Dabei würde ich in der Datenbank (mysql) beim User eine Spalte machen die "online" heisst. Ist diese auf "0" ist er Offline, ist dies auf "1" ist er Online.

    Meine Frage ist, ist das so überhaupt möglich?
    Wenn ja, wie mache ich die Abfrage, ob der Zähler noch hochzählt oder ob dieser stehen geblieben ist?


    Freue mich über alle Vorschläge von euch.
    Schon jetzt ein Dankeschön für eure Hilfe!

    MFG Control

  • bsp: alle 10sekunden rufst du via ajax ne php seite auf die nen update query ausführt. Da wird via update in der userspalte für den angemeldeten user einfach die aktuelle timestamp eingetragen. Abfrage: ist ne select und fragt die timestamp aus der db ab für den gewünschten user und rechnet die aktuelle timestamp - der aus der db vom user und schaut wenn differenz kleiner als 60 (sekunden) dann ist er noch online. Warum differenz 60sekunden? -> gewisse toleranz sollte ja schon gewährleistet sein zb wenn man das lan kabel rausrutscht, der pc hängt etc

  • Was für ein grässliches Gehacke.

    Mach halt n Websocket auf. Wenn der geschlossen wird weißt du serverseitig, dass der Nutzer nicht mehr online ist.

    Über den kannst du dann auch direkt chat und schlagmichtot ablaufen lassen.

  • Schreibe doch einfach ein Script in Javascript welches alle x-Sekunden ( am besten 3 - 5 sek.) eine Anfrage an eine externe PHP-Datei sendet.
    Die PHP-Datei solltest du am besten auf einem Webspace anlegen! Da die Seite, welche auf dem Webspace hostet, nicht wirklich viel zu tun hat, kannst du
    dort immer die Werte der externen Datenbank für den Online-Status managen lassen!

    Kennst du Cronjobs? Du kannst jede x-Sekunden alle Werte bei "online" die true/1 sind auf false/0 setzen. So musst du nichts zwischen speichern!
    Das wäre eine unaufwändige & sehr ressourcensparende Alternative für den Main-Server.


    MfG,
    Rockstar *
    ---------------------------------------------------------
    A C/C++ Programmer & Verilog Describer --
    ---------------------------------------------------------

  • dann hast du aber nen totpunkt von wenn wir mal von deinem beispiel ausgehen von 3-5sek. Da könnte es passieren je nachdem wann der select query kommt das andauernd der user als on/off/on/off... angezeigt wird weils keine toleranz gibt. Dabei wäre der user in meinem beispiel die ganze zeit online.

  • Man kann auch, anstatt eine 1 zu setzen, einen timestamp speichern. Bei der Abfrage wird dann der gespeicherte Timestamp mit der jetzigen Zeit minus der Intervalszeit verglichen. ($timestamp > time () - 5), wenn das True ergibt, ist der User online, bei false nicht mehr.

  • Man kann auch, anstatt eine 1 zu setzen, einen timestamp speichern. Bei der Abfrage wird dann der gespeicherte Timestamp mit der jetzigen Zeit minus der Intervalszeit verglichen. ($timestamp > time () - 5), wenn das True ergibt, ist der User online, bei false nicht mehr.

    genau meine rede. Wir verstehen uns so gut wir sollten ein Projekt gründen das autonom weitere projekte gründet um retrotown aktiv wirken zu lassen

  • Man kann auch, anstatt eine 1 zu setzen, einen timestamp speichern. Bei der Abfrage wird dann der gespeicherte Timestamp mit der jetzigen Zeit minus der Intervalszeit verglichen. ($timestamp > time () - 5), wenn das True ergibt, ist der User online, bei false nicht mehr.

    Wenn ich das richtig sehe, dann müsste ich dazu eine Javascript Funktion machen die alle X-Sekunden eine php Funktion aufruft die beim User die Zeit updatet?

    Geschieht das nicht mehr, so ist der User Offline und kann so die Zeit nicht Updaten und wird somit danach als Offline angezeigt, so sollte dies gedacht sein?

  • Wenn ich das richtig sehe, dann müsste ich dazu eine Javascript Funktion machen die alle X-Sekunden eine php Funktion aufruft die beim User die Zeit updatet?
    Geschieht das nicht mehr, so ist der User Offline und kann so die Zeit nicht Updaten und wird somit danach als Offline angezeigt, so sollte dies gedacht sein?

    Ja so in der Art.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!