Chris: Online-check bei Community

Hallo zusammen,

ich bastle gerade an einer Community Seite und überdenke einen Online Check.
Ich habe mir überlegt die Sessions in ein Verzeichniss zu speichern und beim Login die SessionID in einer DB zu speichern.

An den stellen wo ich den Usern zeigen möchte wer Online ist hole ich mir dann die ID vom jeweiligen user und teste ob die Session noch auf dem Server liegt.
Dann sollte ich ja wissen das er Online ist oder Online war, vor geringer Zeit, sich aber nicht ausgeloggt hat.

... Würdet Ihr das auch so machen?

Oder habt Ihr eine bessere Idee wie ich sowas umsetzen kann ...

  1. Hallo Chris,

    Oder habt Ihr eine bessere Idee wie ich sowas umsetzen kann ...

    Eine Anzeige der "Users Online" ist letztendlich nicht möglich. Dazu habe ich einen Artikel geschrieben: http://aktuell.de.selfhtml.org/artikel/programmiertechnik/useronline/index.htm Deine Methode ist vom Prinzip her die einzige Möglichkeit, auch nur einen angenäherten Wert zu bekommen. (wenn man den mal definiert hat, was überhaupt 'Online' bedeutet)

    Viele Grüße,
    Christian

    --
    Losung und Lehrtext für Donnerstag, 30. Oktober 2003:
    Ich bin der Herr, dein Gott, und du solltest keinen andern Gott kennen als mich und keinen Heiland als allein mich. (Hosea 13,4)
    Christus Jesus entäußerte sich selbst und nahm Knechtsgestalt an, ward den Menschen gleich und der Erscheinung nach als Mensch erkannt. Er erniedrigte sich selbst und ward gehorsam bis zum Tode, ja zum Tode am Kreuz. Darum hat ihn Gott erhöht und hat ihm den Namen gegeben, der über alle Namen ist. (Philipper 2,7-9)
    (http://www.losungen.de/heute.php3, i.V. Götz)
    1. Hallo Chris,

      wenn Du mit PHP und den automatischen Sessions arbeitest, dann kannst Du DIch nicht darauf verlassen, dass die Sessiondatei innerhalb einer festen Zeit (der Untätigkeit) gelöscht wird. Das ist von drei Faktoren abhängig:

      • Session-Lebensdauer              ->   ini
      • Session-GC-Wahrscheinlichkeit    ->   ini
      • GC-Triggerung                    ->   Besucher auf der Site

      Es kann durchaus passieren, dass eine Session-Datei noch 24 Stunden später auf dem Server liegt, wenn dieser z.B. wenig PHP-Traffic hat und die Wahrscheinlichkeit niedrig eingestellt ist, weil man dachte, dass der Traffic hoch wird...

      Wenn man eine Wahrscheinlichkeit von 1 einstellt, und hat dann tatsächlich einen hohen Traffic, würde der Garbage Collector bei jeder PHP-Nutzung anspringen und das Filesystem damit dicht machen.

      Eine bessere Lösung ist der Eintrag des "Last-Click" des Users in die Login-DB. Man kann das gleichzeitig als zusätzliches Sicherheitsfeature nutzen.

      Statt dass man SELECT aufruft, ob der User/Passwort-Satz vorhanden ist, nutzt man einfach

      Update LOGINTABLE where USER=$user and PASSWORD=$password and SESSION=$sid and GRANTLEVEL>=$grantlevel set LASTCLICK=now();

      Danach fragt man ab, wieviele Sätze betroffen waren.

      • Wenn es GENAU ein Satz war, ist alles in Ordnung, der User darf
      • Wenn es GENAU kein Satz war, ist alles in Ordnung, der User darf nicht
      • Wenn es mehr als ein Satz war, sofort System runterfahren, schwerer Fehler

      LOGINTABLE       Tabelle mit den Logindaten
      USER             Nickmane / Loginname
      PASSWORD         i.d.R. md5-Passwort
      GRANTLEVEL       aktuelle Userrechte
      SESSION          Nummer der aktuellen Session
      LASTCLICK        Timestamp oder Datetime des letzten Zugriffs

      Man sollte diese Prüfung bei jedem Skriptaufruf durchführen. Das hat den Vorteil, dass man einen User z.B. über den GRANTLEVEL auch während seiner Session rausschmeißen kann.

      Beim Aufbau der Session wird die Sessionnummer in die Userdatei eingetragen und die Userdaten beschafft.

      Wenn man nun wissen will, wieviele User "Online" sind, kann man einfach ein SELECT auf das LASTCLICK-Feld des LOGINTABLE absetzen.

      Je nachdem, wie eng man die Kriterien einstellt, kann man so feststellen, welche User innerhalb der letzten Sekunden, Minuten, Stunden tätig waren.

      Der Vorteil dieses Verfahrens ist, dass man Identifikation des Users und Online-Vermerk nur ein SQL-Statement benötigt.

      Es geht natürlich auch anders.

      Grüße

      Tom