User Online Status

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • User Online Status

    Ich hab schon diverse Threads darüber gelesen, dass man den timestamp eines users loggt und guckt, wie alt der Timestamp ist, aber ich frage mich, ob es andere Lösungen für das Thema gibt.

    Wenn ich eine Session erzeuge, so bleibt diese ja nur solange bestehen, bis der Browser geschlossen wird (default)
    Kann man Serverseitig irgendwie überprüfen, ob eine bestimmte Session existiert?
    Die Idee wäre, die Session Id des Users in einer DB zu speichern, prüft man dann eine Session, ob diese existiert, so würde man rausbekommen, ob der User noch da ist.
    Ich vermute jedoch, dass dies nicht klappt, da ich so quasi aus einer Session eine andere "anpingen" muss. Sehe ich das richtig?
    SQL Injection kitteh is...

  • #2
    Warum so kompliziert?

    Wenn Du die SessionID in einer Datenbank speicherst brauchst Du diese doch nicht anpingen o.ä. Einfach mittels einer Funktion abfragen ob dieser User mit der gespeicherten SessionID online ist. Wenn nein, dann hat er den Browser geschlossen oder sich ausgeloggt, wenn ja, dann ist er noch immer eingeloggt.

    Bsp:
    PHP-Code:
    function logged_in()
    {
        
    $sql="SELECT UserId
        FROM tabelle
        WHERE UserSession='"
    .session_id()."'
        LIMIT 1"
    ;
        
    $resultmysql_query($sql);
          return ( 
    mysql_num_rows($result)==1);

    In Deinen Seiten (die wohl durch PW/LogIn o.ä. geschützt sind) dann einfach nur noch jeweils

    PHP-Code:
    if (!logged_in()) {
      echo 
    "<A HREF=\"index.php\">Hier</A> klicken, um auf die Hauptseite zu kommen<BR />\n";
      }
    else {
      echo 
    "INHALT...";
      } 
    Wichtig hierbei ist allerdings das jede Datei ein
    PHP-Code:
    @session_start(); 
    zu beginn enthält..

    Oder habe ich Dich nun komplett falsch verstanden?

    Kommentar


    • #3
      Wie prüft man die Session?
      SQL Injection kitteh is...

      Kommentar


      • #4
        http://de.php.net/session

        Kommentar


        • #5
          Danke, für den Tipp und wie prüft man die? isset wird kaum funktionieren
          SQL Injection kitteh is...

          Kommentar


          • #6
            empty?

            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Die frage ist ja, geht dies für sessions, die eigentlich nicht mir als besucher gehören? Hat das jemand getestet? Ich meine da kommt immer false raus, außer man ist die session selbst, weil eben lokal geprüft wird
              SQL Injection kitteh is...

              Kommentar


              • #8
                Ich hab schon diverse Threads darüber gelesen, dass man den timestamp eines users loggt und guckt, wie alt der Timestamp ist, aber ich frage mich, ob es andere Lösungen für das Thema gibt.
                Ich sehe keine andere Methode!
                Wir werden alle sterben

                Kommentar


                • #9
                  Schade, die idee fand ich eigentlich witzig
                  SQL Injection kitteh is...

                  Kommentar


                  • #10
                    Irrwege
                    Bei einer naiven Herangehensweise könnte man auf einige falsche Ideen kommen.


                    online=1 : Der Gedanke:
                    Bei dem Login des Users setze ich in der Usertabelle, bei dem User ein Flag "Online" auf 1 oder True. Und beim Logout auf 0 oder False.

                    Das klappt so nicht, weil:
                    Beim testen, scheint noch alles OK zu sein. Aber in der Praxis zeigt sich ganz schnell, dass ettliche User sich nicht ausloggen. Also einfach den Browser schließen. Auch Netzwerkabbrüche, Stromausfälle usw. bekommen wir damit nicht in den Griff. Auf Dauer werden sich so viele User ansammeln, welche unser Flag auf 1 stehen haben, aber schon seit Stunden weg sind.


                    Sessiondaten: Der Gedanke:
                    Ist doch ganz einfach, ich schaue in dem Ordner nach, wo die ganzen Sessiondateien liegen. Alle Dateien zählen, dann weiß ich die Anzahl der Besucher. Und mit unserialize, komme ich sogar an die Namen.

                    Das klappt so nicht, weil:
                    Nunja, evtl ist man nicht alleine auf dem Server! Schlimmsten falls muß man sich den Tempordner mit vielen anderen Domaininhabern teilen. Soll man deren Sessions auch mitzählen, lesen und untersuchen? Nein! Das verbietet sich.
                    Evtl ist das PHP auch durch den "Suhosin hardening patch" geschützt. Dann wirds schwer/unmöglich die Sessiondaten auszulesen, weil dieser die Daten verschlüsselt.
                    Zur guter Letzt:
                    Die Sessionverwaltung löscht abgelaufene Sessions nicht unbedingt sofort. Einstellbar in der php.ini. Auch ist das Auslesegedöns recht lahmarschig, also ein Klotz am Bein.

                    IP / SessionID merken
                    Der Gedanke:
                    Jagut, dann lege ich eben dafür eine extra Tabelle an! Dort merke ich mir die SessionID oder die IP Adresse und den Zeitpunkt des letzten Zugriffs.

                    Das klappt so nicht, weil:
                    Es ist sinnvoll die SessionID häufiger mal zu wechseln. Selbst die IP ist nicht sonderlich zuverlässig. Auch sammeln sich in der Tabelle, im laufe der Jahre, viele Einträge an, die völlig sinnlos sind, weil abgelaufen.
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      IP / SessionID merken
                      Der Gedanke:
                      Jagut, dann lege ich eben dafür eine extra Tabelle an! Dort merke ich mir die SessionID oder die IP Adresse und den Zeitpunkt des letzten Zugriffs.

                      Das klappt so nicht, weil:
                      Es ist sinnvoll die SessionID häufiger mal zu wechseln. Selbst die IP ist nicht sonderlich zuverlässig. Auch sammeln sich in der Tabelle, im laufe der Jahre, viele Einträge an, die völlig sinnlos sind, weil abgelaufen. [/B]
                      Wieso im detail? Der Rest war mir klar, weil HTTP ein Zustandloses Protokoll ist.
                      Aber wenn ich registrierte User habe, so kann ich sessions mit dem usernamen verbinden und aktualisieren. Zu alte Einträge kann ich immernoch säubern.
                      Ferner nutze ich ein Framework, da gehe ich nicht von aus, dass der User die Session pro Session wechselt.

                      Es feht halt nur der Haken, die Sessionaktivität zu bestimmen.

                      Wir reden hier von einem root, keinem Shared Webspace, dh um fremde Sessions muss ich mir keine Gedanken machen
                      SQL Injection kitteh is...

                      Kommentar


                      • #12
                        Du kannst auch über session_set_save_handler deinen eigenen Handler für die Sessiondaten schreiben, der diese zum Beispiel mit einem Zeitstempel in die Datenbank schreibt. Mit Hilfe dieser kannst du dann nachzählen, wie viele Sessions zum Beispiel die letzten 5 Minuten aktualisiert wurden. In den Usernotes sind zum Beispiel DB-Handler vorhanden.

                        Kommentar


                        • #13
                          Das war mir bewusst, aber diese Lösung ist ja nicht viel anders, als einen normalen Timestamp mitzuschleppen
                          SQL Injection kitteh is...

                          Kommentar


                          • #14
                            Da ist nur die Frage, wie du von einer Session auf die anderen zugreifen willst? combie hat das ja bereits illustriert, das Verzeichnis auslesen ist ja nicht so clever. Das Problem verlagert sich hier in die Datenbank, wodurch du gezielt auf den Zeitpunkt der letzten Änderung zugreifen kannst.

                            Kommentar


                            • #15
                              Stimmt schon, wobei dies nichtmal notwendig ist, der User hat einen Einzelnen einstiegspunkt, dort kann ich das Session updaten integrieren, ohne selbst an der PHP Mechanik zu werkeln.

                              Nun ja, danke
                              SQL Injection kitteh is...

                              Kommentar

                              Lädt...
                              X