Peter: Anzeigen aktueller Sessions

Hi,

ich habe ein Problem mit der Verwaltung von Sessions. Ichh habe einen Login, bei Anmelden eines Users wird für diesen eine Session erstellt.
Wenn sich beispielsweise 5 User angemeldet haben, habe ich 5 offene Sessions.

Wie kann ich mir diese 5 Sessions jetzt mit PHP ausgeben lassen, damit ich festellen kann wieviele User gerade Online sind?

Ich hoffe es kann mir jemand helfen,

Danke!

  1. hi,

    Wenn sich beispielsweise 5 User angemeldet haben, habe ich 5 offene Sessions.
    Wie kann ich mir diese 5 Sessions jetzt mit PHP ausgeben lassen, damit ich festellen kann wieviele User gerade Online sind?

    die daten der sessions werden in dateien im dafür vorgegebenen verzeichnis abgelegt, üblicherweise \temp.
    du könntest natürlich dort nachschauen, welche dateien vorhanden sind, welche session-dateien sind, ob diese noch aktiv sind, ... natürlich alles unter der voraussetzung, dass du dort lesenden zugriff hast, dass php die session-dateien nicht verschlüsselt ablegt (k.A.), etc.

    alles viel zu aufwendig.

    wie du im </archiv/> nachlesen kannst, macht eine anzeige "zur zeit sind x user online" sowieso keinen sinn, da du bei einem zustandslosen protokoll wie http gar nicht von "online sein" reden kannst.

    aber du kannst natürlich eine mehr oder weniger geistreiche statistik á la "x user haben sich in der letzten viertelstunde eingeloggt" anbieten.
    das zieht man am besten über eine tabelle auf, in der man beim login userID und die zeit hinterlegt, und dann immer die zahl der einträge ermittelt, wo zeit > aktuelle zeit minus 15 min ist.
    regelmässiges löschen obsoleter einträge muss natürlich auch noch von hand implementiert werden, ...

    alles in allem viel zu viel aufwand für viel zu wenig nutzwert.

    gruss,
    wahsaga

    1. Hi,

      aber du kannst natürlich eine mehr oder weniger geistreiche statistik á la "x user haben sich in der letzten viertelstunde eingeloggt" anbieten.

      die Information laeuft auf ein "Wieviele Benutzer haben noch nicht ausgetimte Sitzungen?" heraus. Ich weiss nicht, was daran "wenig geistreich" ist. Uebrigens interessiert Deine Meinung bzgl. der Wertigkeit des Konzepts letztendlich genauswenig wie meine. Entscheidend ist, ob die Information nachgefragt wird.

      das zieht man am besten über eine tabelle auf, in der man beim login userID und die zeit hinterlegt, und dann immer die zahl der einträge ermittelt, wo zeit > aktuelle zeit minus 15 min ist.
      regelmässiges löschen obsoleter einträge muss natürlich auch noch von hand implementiert werden, ...

      Es reicht, wenn man beim Datenzugriff des Browserclients jeweils prueft, ob die Sitzung ausgetimt ist. 'von hand' _muss_ da gar nichts geloescht werden (was PHP macht weiss ich aber nicht; vermutlich loescht es?). Sitzungsdatenloeschung kann zeitversetzt automatisert erfolgen.

      alles in allem viel zu viel aufwand für viel zu wenig nutzwert.
      wie du im </archiv/> nachlesen kannst, macht eine anzeige "zur zeit sind x user online" sowieso keinen sinn, da du bei einem zustandslosen protokoll wie http gar nicht von "online sein" reden kannst.

      Der Nutzwert ist m.E. betraechtlich und die Argumentationen die hier "traditionell" gegen "Users online" laufen, zielen doch meist darauf, dass http verbindungslos ist und kein "online" moeglich ist. - Es bietet sich an bei dieser Gelegenheit etwas ueber das Wesen der Protokolle zu philosophieren. Als "Laie" moechte ich zu dieser Diskussion nur beitragen, dass alle Protokolle zumindest zeitweise verbindungslos sind, dass "Verbundenheit" implementiert wird und zwar letztendlich aehnlich wie "Users online".

      Gruss,
      Lude

      1. hi,

        die Information laeuft auf ein "Wieviele Benutzer haben noch nicht ausgetimte Sitzungen?" heraus. Ich weiss nicht, was daran "wenig geistreich" ist.

        was kann ich als besucher einer seite denn damit anfangen?
        und warum wird mir so eine infomration so oft als "anzahl der user, die gerade online sind" verkauft, und eben nicht als "anzahl benutzer haben noch nicht ausgetimte sitzungen haben" ?

        Es reicht, wenn man beim Datenzugriff des Browserclients jeweils prueft, ob die Sitzung ausgetimt ist.

        ich bezweifle, ob du in einer instanz des php-script, die gerade für user xy läuft, ohne weitere herausfinden kannst, wie viele andere noch aktive sessions zur selben zeit existieren.

        deshalb ja mein vorschlag mit der zusätzlichen tabelle.

        'von hand' _muss_ da gar nichts geloescht werden (was PHP macht weiss ich aber nicht; vermutlich loescht es?). Sitzungsdatenloeschung kann zeitversetzt automatisert erfolgen.

        ich bezog mich ja auch auf den vorschlag mit der tabelle - hierbei musst das löschen extra implementiert werden, da sonst irgendwann zigtausende obsoleter datensätze in der tabelle rumliegen.

        php hat übrigens zum löschen der php-eigenen session-dateien aus dem session-dir seinen eigenen "garbage collector" inplementiert, der zufallsgesteuert aktiv wird, und dann für alle abgelaufenen sessions die dateien wegputzt.

        Als "Laie" moechte ich zu dieser Diskussion nur beitragen, dass alle Protokolle zumindest zeitweise verbindungslos sind, dass "Verbundenheit" implementiert wird und zwar letztendlich aehnlich wie "Users online".

        nimm nur mal das normale telefonieren als beispiel - hier hast du ein "protokoll", bei dem dir das beenden der verbindung durch dein gegenüber ("aufhängen") durch ein entsprechendes signal mitgeteilt wird.

        bei der "kommunikation" über webseiten hast du aber eine andere situation. der benutzer ruft eine seite ab, und sie wird in seinem browser dargestellt. ob der besucher diese seite jetzt aber drei stunden lang aufmerksam durchliest, oder sofort nach fünf sekunden zu der beurteilung "uninteressant" kommt, und auf das [X] rechts oben klickt, bekommst du hier gar nicht mit - weil das _lesen_ der seite durch den betrachter schon gar nicht mehr zu dem teil der komunikation gehört, der über das protokoll http abgewickelt wird.

        gruss,
        wahsaga

        1. Hi,

          die Information laeuft auf ein "Wieviele Benutzer haben noch nicht ausgetimte Sitzungen?" heraus. Ich weiss nicht, was daran "wenig geistreich" ist.
          was kann ich als besucher einer seite denn damit anfangen?
          und warum wird mir so eine infomration so oft als "anzahl der user, die gerade online sind" verkauft, und eben nicht als "anzahl benutzer haben noch nicht ausgetimte sitzungen haben" ?

          das sind die falschen Fragen. (btw - ich freue mich durchaus, wenn ich beispielsweise auf [Link:www.wallstreet-online.de] sehe, dass 10 Freunde anwesend sind - also "Friends online")

          Es reicht, wenn man beim Datenzugriff des Browserclients jeweils prueft, ob die Sitzung ausgetimt ist.
          ich bezweifle, ob du in einer instanz des php-script, die gerade für user xy läuft, ohne weitere herausfinden kannst, wie viele andere noch aktive sessions zur selben zeit existieren.

          Wenn Du diese Abfrage beim Datenzugriff haeltst geht das mit jedem RDBMS. Allerdings unter Umgehung von PHP.

          Als "Laie" moechte ich zu dieser Diskussion nur beitragen, dass alle Protokolle zumindest zeitweise verbindungslos sind, dass "Verbundenheit" implementiert wird und zwar letztendlich aehnlich wie "Users online".
          nimm nur mal das normale telefonieren als beispiel - hier hast du ein "protokoll", bei dem dir das beenden der verbindung durch dein gegenüber ("aufhängen") durch ein entsprechendes signal mitgeteilt wird.

          Ich sehe fuer den Benutzer beim Telefonieren kein Protokoll. Nur tieferliegende technische oder hoeherliegende menschliche.

          bei der "kommunikation" über webseiten hast du aber eine andere situation. der benutzer ruft eine seite ab, und sie wird in seinem browser dargestellt. ob der besucher diese seite jetzt aber drei stunden lang aufmerksam durchliest, oder sofort nach fünf sekunden zu der beurteilung "uninteressant" kommt, und auf das [X] rechts oben klickt, bekommst du hier gar nicht mit - weil das _lesen_ der seite durch den betrachter schon gar nicht mehr zu dem teil der komunikation gehört, der über das protokoll http abgewickelt wird.

          "Verbindung" wird nach meiner Kenntnis bei Protokollen dadurch implementiert, dass a) regelmaessig geprueft wird, ob die andere Seiten antworten koennte und b) geprueft wird, ob die gesendeten Daten auch exakt angekommen sind.

          Gruss,
          Lude

          1. hi,

            das sind die falschen Fragen.

            sagst _du_.

            ich bezweifle, ob du in einer instanz des php-script, die gerade für user xy läuft, ohne weitere herausfinden kannst, wie viele andere noch aktive sessions zur selben zeit existieren.
            Wenn Du diese Abfrage beim Datenzugriff haeltst geht das mit jedem RDBMS. Allerdings unter Umgehung von PHP.

            da reden wir von zwei verschiedenen dingen.
            ich beziehe mich zunächst mal auf das session-konzpet, dass php von sich aus implementiert hat.
            du redest von einem session-konzept, dass auf einer DB aufsetzt.

            "Verbindung" wird nach meiner Kenntnis bei Protokollen dadurch implementiert, dass a) regelmaessig geprueft wird, ob die andere Seiten antworten koennte und b) geprueft wird, ob die gesendeten Daten auch exakt angekommen sind.

            ähm - "ja und?"
            (was willst du mir damit in diesem zusammenhang hier sagen?)

            gruss,
            wahsaga

            1. Hi,

              "Verbindung" wird nach meiner Kenntnis bei Protokollen dadurch implementiert, dass a) regelmaessig geprueft wird, ob die andere Seiten antworten koennte und b) geprueft wird, ob die gesendeten Daten auch exakt angekommen sind.
              ähm - "ja und?"
              (was willst du mir damit in diesem zusammenhang hier sagen?)

              die Fragestellung "Was taugt das User-Online Konzept" ist eine Frage, die mit dem Wissen um das Wesen von Protokollen zu bearbeiten ist. - Oder kannst Du's besser ausdruecken?   ;-)

              Gruss,
              Lude

    2. Hallo wahsaga,

      wie du im </archiv/> nachlesen kannst, macht eine anzeige "zur zeit sind x user online" sowieso keinen sinn, da du bei einem zustandslosen protokoll wie http gar nicht von "online sein" reden kannst.

      Ich habe zu diesem Thema mal einen Artikel verfasst: http://aktuell.de.selfhtml.org/artikel/programmiertechnik/useronline/index.htm

      Viele Grüße,
      Christian

      --
      Losung und Lehrtext für Donnerstag, 16. Oktober 2003:
      Du holst mich wieder herauf aus den Tiefen der Erde. Du machst mich sehr groß und tröstest mich wieder. (Psalm 71,20-21)
      Eine Frau, die seit zwölf Jahren den Blutfluss hatte, trat von hinten an Jesus heran und berührte den Saum seines Gewandes. Da wandte sich Jesus um und sah sie und sprach: Sei getrost, meine Tochter, dein Glaube hat dir geholfen. Und die Frau wurde gesund zu derselben Stunde. (Matthäus 9,20.22)
      (http://www.losungen.de/heute.php3, i.V. Götz)
      1. Hi, Christian,

        wir hatten, wenn ich mich recht erinnere, in diesem Kontext schon einmal einen kleinen Argumentenaustausch. Ich nutze diese Gelegenheit einmal, um Dein Fazit aus Deinem interessanten Artikel zu durchleuchten.

        'Fazit
        Die Realisierung einer Anzeige der Anzahl der Besucher, die im Moment online sind, ist nicht möglich.'

        Ja. Aber bitte definiere 'online', bzw. beschreibe wann ein Nutzer genau als verbunden gilt. (Vielleicht sollte man da auch zwischen der Realitaet und deren "IT-Abbildung" unterscheiden?)

        'Man kann mit verschiedenen Ansätzen eine grobe Schätzung dieser Anzahl durchführen. Je mehr Besucher jedoch gleichzeitig auf eine Seite zugreifen, desto ungenauer wird diese Anzeige. Die Anzeige ist nur dann genau, wenn sich gar kein Besucher auf der Seite befindet.'

        Wuerde es sich da nicht anbieten zu belegen, wie ungenau die Schaetzung denn wirklich ist? Nehmen wir mal an "User online" meldet 500, sind dann nicht wirklich ca. 500 Nutzer (minus x; x vielleicht 100, je nach Sitzungs-Timeoutlaenge) verbunden? Und ist die Schaetzung nicht in der realitaet angefordert und dort auch wertvoll? Ist da unsere "technische" Meinung relevant?

        'Wenn Sie sich dennoch entscheiden, so eine Anzeige auf Ihrer Seite einzubauen, dann dürfen Sie die hier veröffentlichten Scripte gerne dazu verwenden. Die Dateien user_online.php und UserOnline.pm stehen zum Download bereit, die Einbindung an die eigene Seite kann aus den hier im Artikel gegebenen Beispielen erschlossen werden.'

        Ja.

        Faellt Dir eigentlich auf, dass einige Deiner Argumente gegen "User online" auch gegen eine Verbindung mit einem nicht-verbindungslosen Protokoll wirken wuerden?

        Gruss,
        Lude

        1. Hallo Lude,

          'Fazit
          Die Realisierung einer Anzeige der Anzahl der Besucher, die im Moment online sind, ist nicht möglich.'

          Ja. Aber bitte definiere 'online', bzw. beschreibe wann ein Nutzer genau als verbunden gilt.

          Genau das ist ja der Knackpunkt. Viele wollen eine User-Online-Anzeige, aber ich habe bis jetzt nicht den leisesten Schimmer, was genau das heißen soll... Bsp: Person A ruft die Seite auf. "1 User Online". Person A liest etwas auf der Seite. Währenddessen ruft Person B die Seite auf. "2 User Online". Die Anzeige von A zeigt jedoch immer noch "1 User Online" an. Eigentlich müsste diese Anzeige ja auch aktualisiert werden...

          'Man kann mit verschiedenen Ansätzen eine grobe Schätzung dieser Anzahl durchführen. Je mehr Besucher jedoch gleichzeitig auf eine Seite zugreifen, desto ungenauer wird diese Anzeige. Die Anzeige ist nur dann genau, wenn sich gar kein Besucher auf der Seite befindet.'

          Wuerde es sich da nicht anbieten zu belegen, wie ungenau die Schaetzung denn wirklich ist?

          Das kann man nicht so einfach sagen... Wenn Du ein Modell entwickeln könntest, wie ungenau das ist, würde ich das durchaus begrüßen und werde es gerne in den Artikel aufnehmen. Allerdings hängt dies IMHO zu stark von den Gewohnheiten der (jeweiligen) Besucher ab, als dass man darüber eine Aussage treffen könnte...

          Faellt Dir eigentlich auf, dass einige Deiner Argumente gegen "User online" auch gegen eine Verbindung mit einem nicht-verbindungslosen Protokoll wirken wuerden?

          Nein. Kläre mich bitte auf. :-)

          Viele Grüße,
          Christian

          --
          Losung und Lehrtext für Freitag, 17. Oktober 2003:
          Menschen sind ja nichts, große Leute täuschen auch; sie wiegen weniger als nichts, soviel ihrer sind. (Psalm 62,10)
          Jesus sprach zu Pilatus: Du hättest keine Macht über mich, wenn es dir nicht von oben her gegeben wäre. (Johannes 19,11)
          (http://www.losungen.de/heute.php3, i.V. Götz)
          1. Hi,

            Genau das ist ja der Knackpunkt. Viele wollen eine User-Online-Anzeige, aber ich habe bis jetzt nicht den leisesten Schimmer, was genau das heißen soll... Bsp: Person A ruft die Seite auf. "1 User Online". Person A liest etwas auf der Seite. Währenddessen ruft Person B die Seite auf. "2 User Online". Die Anzeige von A zeigt jedoch immer noch "1 User Online" an. Eigentlich müsste diese Anzeige ja auch aktualisiert werden...

            Du hast in Deinem Artikel Methoden beschrieben, die "User Online"-Angaben optimieren (sollen). Diese haben ihre "Nachteile" und letztlich muesste man eigentlich den Nutzer nach dem Einloggen am Rechner festbinden, um sicherzugehen, dass der Nutzer (nach Deinem Verstaendnis - so wie ich Dich verstehe ;-) "Online" ist. (Danke uebrigens noch einmal fuer das Wort 'eineindeutig', das sich nach unserer letzten Betrachtung der Problematik in meinem Sprachschatz festsetzen konnte.) Da das nicht geht, muss die arme IT-Fachkraft eben mit einer Naeherung arbeiten. Das Sitzungskonzept ist m.E. dafuer in der einen oder anderen Modifikation (ich bevorzuge (zurzeit ;-) ein Sitzungsende n Minuten nach dem letzten Datenzugriff) geeignet. Wenn man damit nicht zufrieden ist, koennte man m.E. noch etwas ueber die Realitaet und deren Abbildung in der IT-Welt philosophieren. Da kommt dann sicherlich noch das eine oder andere "raus".

            Wuerde es sich da nicht anbieten zu belegen, wie ungenau die Schaetzung denn wirklich ist?

            Das kann man nicht so einfach sagen... Wenn Du ein Modell entwickeln könntest, wie ungenau das ist, würde ich das durchaus begrüßen und werde es gerne in den Artikel aufnehmen. Allerdings hängt dies IMHO zu stark von den Gewohnheiten der (jeweiligen) Besucher ab, als dass man darüber eine Aussage treffen könnte...

            An dem Modell koennte man einige Mathematiker und Soziologen (na, die sind heute auch schon sehr mathematisch ausgebildet) arbeiten lassen. Das waere nicht fuer mich.

            Faellt Dir eigentlich auf, dass einige Deiner Argumente gegen "User online" auch gegen eine Verbindung mit einem nicht-verbindungslosen Protokoll wirken wuerden?

            Nein. Kläre mich bitte auf. :-)

            Beispielsweise der Punkt "Nachteile des 1.Loesungsansatzes". Da argumentierst Du, etwas merkwuerdig wie ich finde, mit einer Durchschnittsverweildauer. Wo ist denn da der Unterschied zwischen einem Richclient und einem Browserclient?

            Gruss,
            Lude

            1. Hallo Lude,

              letztlich muesste man eigentlich den Nutzer nach dem Einloggen am Rechner festbinden, um sicherzugehen, dass der Nutzer (nach Deinem Verstaendnis - so wie ich Dich verstehe ;-) "Online" ist.

              Genau das ist das Problem: Ist es damit (festbinden) schon getan? Ist der User damit noch Online?

              Beispielsweise der Punkt "Nachteile des 1.Loesungsansatzes". Da argumentierst Du, etwas merkwuerdig wie ich finde, mit einer Durchschnittsverweildauer. Wo ist denn da der Unterschied zwischen einem Richclient und einem Browserclient?

              Richclient? Sagt mir jetzt nichts...

              Der einzige Grund, warum ich die Durchschnittsverweildauer herangezogen habe, ist, weil es ja nicht möglich festzustellen, ob jemand überhaupt noch verweilt... Bei nicht verbindungslosen Protokollen ist dem nicht so, bei IRC z.B. kann durchaus festgestellt werden, ob jemand noch da ist.

              Viele Grüße,
              Christian

              --
              Losung und Lehrtext für Freitag, 17. Oktober 2003:
              Menschen sind ja nichts, große Leute täuschen auch; sie wiegen weniger als nichts, soviel ihrer sind. (Psalm 62,10)
              Jesus sprach zu Pilatus: Du hättest keine Macht über mich, wenn es dir nicht von oben her gegeben wäre. (Johannes 19,11)
              (http://www.losungen.de/heute.php3, i.V. Götz)
              1. Hi,

                Beispielsweise der Punkt "Nachteile des 1.Loesungsansatzes". Da argumentierst Du, etwas merkwuerdig wie ich finde, mit einer Durchschnittsverweildauer. Wo ist denn da der Unterschied zwischen einem Richclient und einem Browserclient?

                Richclient? Sagt mir jetzt nichts...

                "Standardanwendungen" mit "EXEs" und "DLLs" (lokal oder vom Datenserver) nenne ich (nicht nur ich) rich clients. Gegenpart der thin client, oder Browserclient. Dann gibt's noch den Terminalclient.

                Wie denkst Du heute? "User Online" Mist oder gut oder von IT-Fachkraeften unbewertbar, also Bewertung durch den "Markt"?

                Gruss,
                Lude

                1. Hallo Lude,

                  Wie denkst Du heute? "User Online" Mist

                  Ja. Viel zu viel Aufwand für eine Zahl, die am Ende doch nichts aussagt. ;-)

                  Viele Grüße,
                  Christian

                  --
                  Losung und Lehrtext für Freitag, 17. Oktober 2003:
                  Menschen sind ja nichts, große Leute täuschen auch; sie wiegen weniger als nichts, soviel ihrer sind. (Psalm 62,10)
                  Jesus sprach zu Pilatus: Du hättest keine Macht über mich, wenn es dir nicht von oben her gegeben wäre. (Johannes 19,11)
                  (http://www.losungen.de/heute.php3, i.V. Götz)