Simon: Anzeigen welche User online sind.

Hi,
ich hab bei meiner Seite die ganzen Daten von den Usern in einer Db gespeichert. Ich würde jetzt gern beim jeweiligen Profil des Users anzeigen ob dieser online ist oder Nicht.

Kann mir da jemand ein paar Tipps geben wie ich das machen könnte ?

MfG
Simon

  1. Hi,

    Ich würde jetzt gern beim jeweiligen Profil des Users anzeigen ob dieser online ist oder Nicht.

    woher kannst Du (i.e. Dein Server) wissen, wer online ist und wer nicht?

    Viele Gruesse,
    der Bademeister

    1. woher kannst Du (i.e. Dein Server) wissen, wer online ist und wer nicht?

      Das frag ich mich ja.
      Aber du wirst das sicherlich kennen, dass in einem Forum steht wenn man auf ein Profil klickt: online oder Offline.

      1. Hi,

        Das frag ich mich ja.

        Und ich Dich auch :-)

        Aber du wirst das sicherlich kennen, dass in einem Forum steht wenn man auf ein Profil klickt: online oder Offline.

        Ja. Was so eine Information aber meint, ist im Regelfall eher sowas wie "eingeloggt" oder nicht. Ob jemand eingeloggt ist, weiss Dein Server natuerlich. Du musst nur dafuer sorgen, dass der PHP-Prozess, der den anderen User bedient, an diese Information auch rankommt - dazu hat ja Tom bereits geholfen.

        Achtung allerdings:

        1.: Eingeloggt ist u.U. auch jemand, der vor zwei Stunden mal da war und sich nur nicht korrekt ausgeloggt hat.
        2.: Eine Info, wer sonst noch eingeloggt ist, wuerde mich als Benutzer nicht die Bohne interessieren, solange ich nicht irgendwelche Moeglichkeiten zur direkten Kommunikation mit ihm habe. Was hast Du denn vor?

        Viele Gruesse,
        der Bademeister

        1. Achtung allerdings:

          1.: Eingeloggt ist u.U. auch jemand, der vor zwei Stunden mal da war und sich nur nicht korrekt ausgeloggt hat.

          Darum will ich ja auch anzeigen ob er online ist (d.h. er macht gerade was auf der Seite)

          2.: Eine Info, wer sonst noch eingeloggt ist, wuerde mich als Benutzer nicht die Bohne interessieren, solange ich nicht irgendwelche Moeglichkeiten zur direkten Kommunikation mit ihm habe. Was hast Du denn vor?

          Direkte Kommunikation steht zur Verfügung, durch Chats, usw.

          Ich hab grad etwas gefunden:

          <?php  
            
          $dbhost="host";  
          $dbuser="benutzername ";  
          $dbpass="passwort";  
          $dbname="datenbank name";  
            
          mysql_connect($dbhost,$dbuser,$dbpass);  
          mysql_select_db($dbname);  
            
          $zeitspanne = 300; //Sekunden  
          $ip = $_SERVER['REMOTE_ADDR'];  
            
          //veraltete Einträge löschen  
          mysql_query("DELETE FROM useronline WHERE zeit < ".time()."");  
            
          //Zeitpunkt erneuern  
          mysql_query("UPDATE useronline SET zeit = '".(time()+$zeitspanne)."' WHERE ip='".$ip."'");  
            
          // ist der Besucher noch nicht eigetragen, so wird ein neuer Eintrag erzeugt.  
          if(!mysql_affected_rows()) {  
          mysql_query("INSERT INTO useronline (ip,zeit) VALUES ('$ip ','".(time()+$zeitspanne)."')");  
          }  
          // die Zahl der Online-User ermitteln.  
          $result = mysql_query("SELECT count(*) FROM useronline");  
          echo mysql_result($result,0)." User online";  
          ?>
          

          Ich glaube mit ein paar Anpassungen (ich werd nicht die Ip sondern die User ID verwenden) usw. ist da gar nicht so schlecht

          1. Hello,

            Ich hab grad etwas gefunden:

            in mehrfacher Hinsicht schwachsinnig.

            Deletes sind meistens sehr teuer in Datenbanken.

            Außerdem sind in Deinem Beispiel mehrere Queries notwendig, um das Ziel zu erreichen, auch bei normalem wiederkehrenden Requests des Users, also auch innerhalb der "Loginzeit".

            Das ist unnötig. _Ein_ Update-Statement reicht für alle notwendigen Tests vollkommen aus und dann vermutlich noch ein weiteres Select-Statement, um die aktuellen Benutzerdten und -rechte zu holen.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
          2. Ich hab grad etwas gefunden:
            [...]

            Du willst bei jedem(!) Seitenrequest vier(!) Datenbankabfragen laufen lassen (was genausogut mit zwei Abfragen und einer Tabelle weniger ginge), um ein paar unzuverlaessige Informationen ueber die Anwesenheit von Besuchern zu ermitteln? Unzuverlaessig, weil

            • ein User, der seit sechs Minuten auf einer Seite schmoekert, nicht als online gefuehrt wird,
            • ein User, der vor zwei Minuten noch da war und sich ausgeloggt hat (was Du wissen koenntest!), noch als online gefuehrt wird.

            Halte ich fuer bloedsinnig.

            Viele Gruesse,
            der Bademeister

            1. Du willst bei jedem(!) Seitenrequest vier(!) Datenbankabfragen laufen lassen (was genausogut mit zwei Abfragen und einer Tabelle weniger ginge), um ein paar unzuverlaessige Informationen ueber die Anwesenheit von Besuchern zu ermitteln? Unzuverlaessig, weil

              Ok das werd ich anders machen

              • ein User, der seit sechs Minuten auf einer Seite schmoekert, nicht als online gefuehrt wird,

              Ich sagte ja dass ich noch was ändern werde

              • ein User, der vor zwei Minuten noch da war und sich ausgeloggt hat (was Du wissen koenntest!), noch als online gefuehrt wird.

              Ich werde auch noch den user als ofline anzeigen lassen wenn er sich abmeldet

        2. Hallo,

          2.: Eine Info, wer sonst noch eingeloggt ist, wuerde mich als Benutzer
          nicht die Bohne interessieren,

          mich schon, sogar, wenn dieser seit Stunden gar nicht mehr vor dem Monitor sitzt sondern in der Sonne liegt. Als "mitstrippenzieher" zweier kleinen Communitys freue ich mich, wenn ich daran sehe, daß jemand verschollen geglaubtes doch noch ab und an mal im jeweiligen Community-Forum vorbeigesehen hat. Anderen, das habe ich gehört, geht es da ebenso.

          Klar könnte ich da hinter den Kulissen auch genauere Daten zu abfragen, aber wenn da liebe Name verschollen geglaubter gleich "oben auf" stehen, verbindet das. Und Verbindung ist beim vernetzen wichtig.

          Chräcker

          --
          Erinnerungen?
          zu:]
          1. Hallo

            »» 2.: Eine Info, wer sonst noch eingeloggt ist, wuerde mich als Benutzer
            »» nicht die Bohne interessieren,

            mich schon, ... Als "mitstrippenzieher" zweier kleinen Communitys freue ich mich, wenn ich daran sehe, daß jemand verschollen geglaubtes doch noch ab und an mal im jeweiligen Community-Forum vorbeigesehen hat.

            Das ist ein durchaus nachvollziehbares Anliegen. In bestimmten Foren und Boards (so sie mich besonders interessieren und die Software das technisch unterstützt) ist es manchmal auch ganz "heimelig", zu sehen, wer erst kürzlich ebenfalls dort war. Für *deinen* Zweck braucht es aber nicht diese Anzeige, wenngleich auch die dahinter stehende Technik. Die Anzeige des letzten Logins, oftmals im Profil zu sehen, oder, für Communityadmins und -moderatoren, eine Liste des letzten Logins der einzelnen Mitglieder würde dazu ausreichen.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
            Terry Pratchett, "Wachen! Wachen!"
            Veranstaltungsdatenbank Vdb 0.3
            1. Hallo,

              Die Anzeige des letzten Logins, oftmals im Profil zu sehen, oder, für
              Communityadmins und -moderatoren, eine Liste des letzten Logins der
              einzelnen Mitglieder würde dazu ausreichen.

              ja, aber so Lebensvoyeure wie ich mögen es doch leicht *zwinker* - und bei dem minütlichen Abrufen "meiner" Foren sehe ich das dann immer gleich im Eingangsbereich.

              Aber das sind in der Tat nur Details....

              Chräcker

              --
              Erinnerungen?
              zu:]
              1. Hallo

                Hallo,

                »» Die Anzeige des letzten Logins, oftmals im Profil zu sehen, oder, für
                »» Communityadmins und -moderatoren, eine Liste des letzten Logins der
                »» einzelnen Mitglieder würde dazu ausreichen.

                ja, aber so Lebensvoyeure wie ich mögen es doch leicht *zwinker* - und bei dem minütlichen Abrufen "meiner" Foren sehe ich das dann immer gleich im Eingangsbereich.

                Jou, so ist das ja meistens, so ist *man* das auch gewöhnt. Aber bei größeren und sehr aktiven Communities ist die Liste, rein technisch gesehen, auf dem Portal dann entweder nur ein kurzer Ausriss (unvollständig) oder ellenlang (unübersichtlich). So oder so keine ideale Lösung (nach wie vor rein technisch gesehen).

                Tschö, Auge

                --
                Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                Terry Pratchett, "Wachen! Wachen!"
                Veranstaltungsdatenbank Vdb 0.3
          2. Hallo Chräcker,

            freue ich mich, wenn ich daran sehe, daß jemand verschollen geglaubtes doch noch ab und an mal im jeweiligen Community-Forum vorbeigesehen hat. Anderen, das habe ich gehört, geht es da ebenso.

            ich freue mich vor allem, mal wieder ein paar Beiträge von Dir zu lesen!

            Freundliche Grüße

            Vinzenz

      2. Hi!

        » woher kannst Du (i.e. Dein Server) wissen, wer online ist und wer nicht?

        Das frag ich mich ja.
        Aber du wirst das sicherlich kennen, dass in einem Forum steht wenn man auf ein Profil klickt: online oder Offline.

        Ja das kennt man, aber das ist gelogen, im besten Falle geraten. Du kannst nicht feststellen, ob jemand online ist.
        Ein Beispiel - ich benutze Dein Login und schalte dann meinen Rechner aus - bin ich dann online? Wie willst du so etwas feststellen?
        Das einzige was Du erkennen kannst ist, _wann_ (Zeitpunkt) ein User sich 'angemeldet' und evtl. wieder 'abgemeldet' hat. Alles in der Zwischenzeit ist Raterei und das ist auch...

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. Hello,

    Hi,
    ich hab bei meiner Seite die ganzen Daten von den Usern in einer Db gespeichert. Ich würde jetzt gern beim jeweiligen Profil des Users anzeigen ob dieser online ist oder Nicht.

    Kann mir da jemand ein paar Tipps geben wie ich das machen könnte ?

    Bei HTTP gibt es kein wirkliches Login
    Du kannst also bestenfalls anzeigen lassen, ob ein User innerhalb einer gewissen Zeit einem Request ausgelöst hat. Dafür benötigst Du i.d.R. eine Session.

    Und das DB-Konzept sollte auch dazu passen:

    http://forum.de.selfhtml.org/archiv/2008/4/t170126/#m1111727

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Eine Session hab ich ja.
      Ich hab mir gedacht dass ich vielleicht bei jeder Aktivität des Users den Timestamp in die DB schreib, nur weiß ich nicht ob das ein gute idee ist, weil wenn 30 user online sind?

      1. Hello,

        Eine Session hab ich ja.

        Ich hab mir gedacht dass ich vielleicht bei jeder Aktivität des Users den Timestamp in die DB schreib, nur weiß ich nicht ob das ein gute idee ist, weil wenn 30 user online sind?

        Hast Du den Thread, den ich Dir verlinkt habe, gelesen?

        Das ist für den Server kein Problem. Da können auch 150 User überlappend aktiv sein.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  3. Lieber Simon,

    üblicherweise sieht man bei den ebenso üblichen Foren "users online: nick1, nick2 etc.", was nichts anderes bedeutet, als dass ein authentifizierter Request dieses/dieser User innerhalb der letzten X Minuten erfolgt ist.

    Wenn Dir diese Info so wichtig ist, dann kannst Du ja jedem User in Deiner DB einen Timestamp "lastRequest" geben, der bei jedem Aufruf Deiner Seite aktualisiert wird. Beim korrekten Abmelden setzt Du diesen Timestamp einfach auf null (also eins kleiner als eins).

    Und die Übersicht iteriert nur noch durch die User und prüft, ob der jeweilige lastRequest innerhalb des von Dir als aussagekräftig angesehenen Intervalls liegt, um diesen User dann aufzuführen.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Beim korrekten Abmelden setzt Du diesen Timestamp einfach auf null (also eins kleiner als eins).

      warum nicht gleich auf NULL anstat irgend einem Pseudowert? 0 oder -1 sind gültige Timestamps die halt sehr weit in der Vergangenheit liegen.

      1. Lieber suit,

        | Beim korrekten Abmelden setzt Du diesen Timestamp einfach auf null (also eins kleiner als eins).

        warum nicht gleich auf NULL anstat irgend einem Pseudowert? 0 oder -1 sind gültige Timestamps die halt sehr weit in der Vergangenheit liegen.

        und genau dort sollen sie ja auch sein, weil sie dann garantiert aus dem Rahmen der Zeitspanne fallen und nicht angezeigt werden. Und genau das ist ja auch gewünscht.

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Lieber suit,

          »» | Beim korrekten Abmelden setzt Du diesen Timestamp einfach auf null (also eins kleiner als eins).
          »»
          »» warum nicht gleich auf NULL anstat irgend einem Pseudowert? 0 oder -1 sind gültige Timestamps die halt sehr weit in der Vergangenheit liegen.

          und genau dort sollen sie ja auch sein, weil sie dann garantiert aus dem Rahmen der Zeitspanne fallen und nicht angezeigt werden. Und genau das ist ja auch gewünscht.

          Was ist, wenn man anzeigen möchte, wann der Benutzer das letzte Mal online war?

          Dann gibts wieder eine Sonderregelung "if ($timestamp !== 0)" - die kann man sich sparen.

          1. Lieber suit,

            Was ist, wenn man anzeigen möchte, wann der Benutzer das letzte Mal online war?

            ja, das ist absolut ein Punkt für Dich. Daran hatte ich nicht gedacht. Dazu sollte man dann wohl doch eine weitere Eigenschaft in der DB für jeden User bereit halten, z.B. "loggedIn". Dann kann man sich das Manipulieren des Timestamps auf 0 hin sparen, da man bei "users online" nicht nur den Timestamp auf das Zeitfenster hin prüft, sondern auch noch den Wert von loggedIn.

            Oder so ähnlich.

            Liebe Grüße,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)