Welcher User ist gerade online

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

  • Welcher User ist gerade online

    Hilfe :-) (wie immer ). Passt auf, ich habe folgendes Problem:

    Habe eine Art Kontaktbörse programmiert. Nun möchte ich eine Funktion einbauen, in der man sieht, welche User gerade online sind. Das Problem ist, dass die s_user_id (also die Session-Variable) als Cookie gespeichert wird. Das ist so gewünscht.

    Wie kann ich nun auslesen, wer gerade online ist? Per Tabelle wäre das ja kein Problem.
    Ist es sinnvoll, beim Einloggen des Users die s_user_id in eine Tabelle zu schreiben und sie beim Ausloggen wieder zu löschen? Aber was ist, wenn der User den Browser einfach schließt?

    Fragen über Fragen..aber ich bin sehr zuversichtlich, dass Ihr mir mal wieder helfen könnt :-)

    Liebe Grüße
    Anne

  • #2
    das problem ist nicht unbekannt, also benutz mal die suche=> 'user online'
    Kissolino.com

    Kommentar


    • #3
      Also ich halte es durchaus für sinnvoll das über eine Tabelle zu machen ... eigentlich denke ich, dass das so ziemlich die einzige Möglichkeit ist .

      Schreib einfach beim einloggen die benötigten Daten in eine "whos_online"-tabelle. Zu diesen benötigten Daten gehört auf jedenfall ne Timestamp.
      Dann schreibst du eine Funktion, die einfach überprüft ob der aktuelle Nutzer schon in dieser Tabelle drinsteht, und wenn ja, machst du ein Update der Timestamp. Dies Funktion fügst du in jede deiner Seite ein (genau wie auch die Überprüfung, oder der akt. User schon eingeloggt ist ... was du ja anscheinend schon hast).
      Wenn jemand ausloggt, löschst du einfach seinen Eintrag.

      Zu deinem Problem, mit dem User, der nicht ausloggt:
      Dann schreibst du noch ne Funktion, die die Tabelle nach Einträgen durchsucht, deren Timestamp schon eine bestimmt Zeit zuirückliegt .. diese Einträge werden gelöscht. Die Funktion auch in alle Seiten rein, damit sie auch immer durchgeführt wird, wenn jemand ne Seite aufruft.

      Das sollte es schon gewesen sein ... ich gebe zu bedenken, dass ich sowas noch nie selbst gecodet habe, sondern mir nur mal eben so überlegt habe ... meinem Usertitle entsprechend, bin ich auch noch in der "Aufbauphase" .. also keine Gewähr ...
      [color=red]Geht nicht[/color] ist keine Fehlermeldung

      Kommentar


      • #4
        Original geschrieben von Big Chief
        Zu deinem Problem, mit dem User, der nicht ausloggt:
        Dann schreibst du noch ne Funktion, die die Tabelle nach Einträgen durchsucht, deren Timestamp schon eine bestimmt Zeit zuirückliegt .. diese Einträge werden gelöscht. Die Funktion auch in alle Seiten rein, damit sie auch immer durchgeführt wird, wenn jemand ne Seite aufruft.
        was man aber mit EINER sql-query viel schöner machen kann. stichwort DATE_ADD()/DATE_SUB() und INTERVAL

        natürlich auch nciht zu verachten.... der tipp von Wurzel!
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          toll..vielen dank :-)

          hab jetzt zwei spalten in die tabelle eingefügt, mit s_user_id und letzer aktion des users.. klappt alles wunderbar

          großartig

          nun noch ein kleines problem:
          ich möchte die aktuellsten (1 stunde) einträge in meinem forum anzeigen lassen. datum des eintrags steht als datetime in der tabelle.
          wie kann ich nun vergleichen, ob es älter als eine stunde ist??
          hab bis jetzt so probiert:
          PHP-Code:
          $SqlMessageDate "SELECT message_date, DATE_FORMAT(message_date, '%d.%m.%Y - %H:%i:%s') AS message_date FROM message WHERE message_id=$arrayMaxId[0] ORDER BY message_date";
          $ResMessageDate mysql_query $SqlMessageDate$db_connect );
          $arrayMessageDate mysql_fetch_array $ResMessageDate );

          $date $arrayMessageDate[message_date];
          $date_old mktime$date );

          //aktuelle zeit - 60 minuten
          $new 60;
          $date_now time() - $new
          Aber mein Vergleich klappt nicht..könnt Ihr mir helfen?

          Kommentar


          • #6
            WHERE message_date > NOW() - INTERVAL 1 HOUR
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              where message_date > date_sub(now(), interval 1 hour )
              h.a.n.d.
              Schmalle

              http://impressed.by
              http://blog.schmalenberger.it



              Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
              ... nur ohne :-)

              Kommentar


              • #8
                toll..vielen vielen vielen dank :-)

                Kommentar


                • #9
                  Sooo Jungs und Mädels ;-) weiter gehts:

                  Hab jetzt eine Tabelle angelegt (member_online alias mo), in der mo_member_id sowie mo_lastaction gespeichert werden.

                  Bei Login wird alles gesetzt, sobald der User was macht, wird lastaction upgedatet (hört sich komisch an hi).

                  aaaaber: wenn die zeit abgelaufen ist (abfrage funktioniert auch prima), soll der user ja ausgeloggt werden,sprich in meinem falle:
                  automatisch auf index.php verwiesen werden.
                  doch der folgende code kann ja gar nicht klappen, denn er wird ja nur ausgeführt, wenn der user was macht
                  --- und wenn dies passiert, wird ja lastaction gesetzt...versteht ihr, ne?!

                  was mach ich falsch..mein kopf ist leer..hilfe :-(

                  PHP-Code:
                   //Wenn $s_user_id gesetzt ist
                  if ( isset( $s_user_id ) && $s_user_id ) {

                  //Zeitstempel der letzten Aktion des Users abrufen
                  $SqlLastAction "SELECT COUNT(mo_lastaction) AS count FROM member_online WHERE mo_member_id = $s_user_id ";
                  $SqlLastAction .= "AND mo_lastaction <  ( NOW() - INTERVAL 10 MINUTE )";

                  $ResLastAction mysql_query $SqlLastAction$db_connect );

                  if ( 
                  $count!=){
                  $SqlDelmo "DELETE FROM member_online WHERE mo_member_id = $s_user_id";

                  $ResDelmo mysql_query $SqlDelmo$db_connect );
                  }

                  else {
                  //Zeitstempel der letzten Aktion eines Users
                  $SqlUpdmo "UPDATE member_online SET mo_lastaction=now() WHERE mo_member_id = $s_user_id";
                      
                  $ResUpdmo mysql_query $SqlUpdmo$db_connect );    

                  Kommentar


                  • #10
                    Original geschrieben von hasoelpaso
                    doch der folgende code kann ja gar nicht klappen, denn er wird ja nur ausgeführt, wenn der user was macht
                    --- und wenn dies passiert, wird ja lastaction gesetzt...versteht ihr, ne?!

                    was mach ich falsch..mein kopf ist leer..hilfe :-(
                    Wie wärs, wenn du bevor du lastaction einträgst, erst überprüfst, ob er schon ausgeloggt ist?
                    Für Rechtschreibfehler übernehme ich keine Haftung!

                    Kommentar


                    • #11
                      das mach ich ja, indem ich prüfe

                      PHP-Code:
                       if ( isset( $s_user_id ) && $s_user_id 
                      die ist ja nur gesetzt, wenn man eingeloggt ist

                      Kommentar


                      • #12
                        du überprüfst die Differenz zwischen jetzt und Lastaction. Ist diese größer als dein gegebener Wert, dann logst du out!
                        Für Rechtschreibfehler übernehme ich keine Haftung!

                        Kommentar


                        • #13
                          Original geschrieben von Damian1984
                          du überprüfst die Differenz zwischen jetzt und Lastaction. Ist diese größer als dein gegebener Wert, dann logst du out!
                          aber wie mach ich das, dass automatisch ausgeloggt wird? die differenz wird ja schon in der sql-abfrage ausgelesen! verstehst du?

                          PHP-Code:
                           $SqlLastAction "SELECT COUNT(mo_lastaction) AS count FROM member_online WHERE mo_member_id = $s_user_id ";
                          $SqlLastAction .= "AND mo_lastaction <  ( NOW() - INTERVAL 10 MINUTE )"
                          wenn count!=0 gibts ein ergebnis..dann soll ausgeloggt, d. h. auf index.php verwiesen werden

                          Kommentar


                          • #14
                            wo wird $count definiert?
                            verweisen mit header();
                            Für Rechtschreibfehler übernehme ich keine Haftung!

                            Kommentar


                            • #15
                              Original geschrieben von Damian1984
                              wo wird $count definiert?
                              verweisen mit header();
                              $count ist das Ergebnis der SQL-Abfrage

                              hab das jetzt geändert...lese mit fetch_array $count aus...wenn $count!="" ist, soll ausgeloggt werden -> KLAPPT aber nicht
                              Zuletzt geändert von hasoelpaso; 12.03.2004, 15:44.

                              Kommentar

                              Lädt...
                              X