Sebastian: Benutzer Online

Hey...

...folgendes Problem habe ich.
Wenn sich ein User auf meiner Seite einloggt wird der Banutzername immer über Sessioncookies weitergeleitet.
Nun will ich anzeigen, wie viel User angemeldet sind..und gegebenfalls welche, aber das ist ja kein Problem.

Eine möglichkeit wäre es, das wenn sich ein User einloggt in die Datenbank eingetragen wird das User online ist und dann anzeigen lassen, dass alle User die in der Spalte Status online stehen haben, angezeigt werden.
Nun ist aber das Problem, dass wenn ein User z.B. einfach nur den Browser schließt ohne den Logout button zu drücken nicht offline in die spalte status eingetragen wird und der User weitrhin als eingeloggt angezeigt wird.

Kann mir jemand vielleicht eine Alternatievlösung sagen, oder wie ich das Problem mit dieser Methode lösen kann.

Eine weitere Lösung wäre es natürlich die Sessiondaten in eine Datenbank abzulegen. Ehrlich gesagt wäre mir das auch lieber, nur steige ich nicht so recht hinter das System ;D bin wohl leicht beschränkt.
Wenn mir natürlich dazu jemand eine genaue Referenz geben könnte wäre es natürlich am besten, aber ich würde ja nie diesen enormen Aufwand von euch verlangen ^^

Grüße

Sebastian

  1. Hallo Sebastian

    Nun will ich anzeigen, wie viel User angemeldet sind..und gegebenfalls welche, aber das ist ja kein Problem.

    Ich empfehle Dir die Lektüre des Feature-Artikels von Christian Seiler zum Thema.

    Freundliche Grüße

    Vinzenz

    1. Ich empfehle Dir die Lektüre des Feature-Artikels von Christian Seiler zum Thema.

      Dank für deinen Vorschlag, doch finde ich alle Lösungen nicht wirklich zufriedend stellend (siehe Nachteile) z.b. das bei der überprüfung, ob nutzer noch online sind frames genutzt werden müssen usw..

      Soweit ich mich da reingelesen habe und es verstanden habe, wäre die beste möglichkeit doch, wenn man die sessiondaten in einer datenbank speichert. Man könnte einfach die zeilen in der entsprechenden tabelle auslesen und hätte die anzahl und könnte gegenbenfalls wenn eine spalte den jeweiligen benutzernamen enthält diese ausgeben. Sollte ich mich da jetzt irren, könnt ihr mich natürlich gerne korigieren.

      Also, bin immer noch für vorschläge offen ;).

      Seb

      1. Hi!

        Soweit ich mich da reingelesen habe und es verstanden habe, wäre die beste möglichkeit doch, wenn man die sessiondaten in einer datenbank speichert. Man könnte einfach die zeilen in der entsprechenden tabelle auslesen und hätte die anzahl und könnte gegenbenfalls wenn eine spalte den jeweiligen benutzernamen enthält diese ausgeben. Sollte ich mich da jetzt irren, könnt ihr mich natürlich gerne korigieren.

        Also, bin immer noch für vorschläge offen ;).

        Hilft dir dann das vielleicht als Denkansatz weiter: http://tut.php-q.net/online.html?

        Grüße,
        Fabian St.

        --
        ---------------------
        fabi@erde ~# whatis spam
        spam: nothing appropriate
        ---------------------
        Selfcode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)
      2. Hallo Sebastian

        Ich empfehle Dir die Lektüre des Feature-Artikels von Christian Seiler zum Thema.

        Dank für deinen Vorschlag, doch finde ich alle Lösungen nicht wirklich zufriedend stellend (siehe Nachteile) z.b. das bei der überprüfung, ob nutzer noch online sind frames genutzt werden müssen usw..

        Ja, das war durchaus beabsichtigt, als ich Dir diesen Artikel empfohlen habe. Es gibt keine wirklich zufriedenstellende Lösung für Dein Problem. Dennoch möchtest Du ja auf dieses Feature Deiner Seiten nicht verzichten? Ja, dann betrachte ich mal Deine Analyse:

        Soweit ich mich da reingelesen habe und es verstanden habe, wäre die beste möglichkeit doch, wenn man die sessiondaten in einer datenbank speichert. Man könnte einfach die zeilen in der entsprechenden tabelle auslesen und hätte die anzahl und könnte gegenbenfalls wenn eine spalte den jeweiligen benutzernamen enthält diese ausgeben. Sollte ich mich da jetzt irren, könnt ihr mich natürlich gerne korigieren.

        Du möchtest also eine Datenbank einsetzen und Dir somit das komplizierte Dateihandling ersparen, das ist eine gute Idee. Du möchtest auf Frames verzichten und nicht unnötig Traffic produzieren, ebenfalls eine gute Idee. Du hast eine Anmeldung (sonst hättest Du ja keine Namen, die Du anzeigen möchtest).

        Fazit: Du hast richtig erkannt, dass Lösung Zwei für Dich den besten Kompromiss darstellt.

        Freundliche Grüße

        Vinzenz

      3. Also ich habe das wie folgt gelöst (ist etwas DB-Nervig):

        User kommt auf die Seite.
        User loggt sich ein.
        Ein Timstamp wird dem user in seinen DB-Eintrag "gestanzt" =)

        Wenn ich nun User die online sind ausgeben möchte sage ich:
        "Zähle Alle user bei denen der Timestamp nicht älter als 46 sekunden ist".
        Und  im Profilfenster fragt er eben auch ab: Ist der User-Timestamp älter als 46 sekunden dann ist er (vermutlich) nichtmehr online.

        Es ist faktisch nicht möglich die ständige anwesenheit eines Users via HTTP zu verfolgen. Daher muss man gezwungenermassen tricksen. Anders gehts nicht und anders machen Foren es auch nicht.

        Dass ich 46 Sekunden nehme ist so ein Mittelwert den ich mir bei meinem Projekt aus dem Inhalt errechent habe. Viel Text = Hohe Laufzeit und wenig text (shop) = kurze laufzeit.

        ciao

        --
        <NetPanther> Na, die Stadt ist Developia, die Hauptstadt von Developien!
        <NetPanther> Developien ist übrigens ein Entwicklungsland!
        <acid`awy> bossi was haste fuern abschluss ?
        <[DEF]Bossland> tdsl
        http://german-bash.org/action/top/n/50
        sh:) fo:| ch:{ rl:( br:& n4:~ ie:| mo:? va:{ de:< zu:| fl:) ss:| ls:< js:|