Suche vergebens - User Session aus DB löschen

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

  • Suche vergebens - User Session aus DB löschen

    Hey,

    auch wenn es hier nicht gern gesehen wird, aber nach ausführlicher suche, hab ich einfach nicht das passende gefunden.

    Ich möchte gern die User anzeigen lassen, die gerade online sind.

    Dafür speichere ich die UserSession in de DB, jedoch wird die nur gelöscht, wenn die Person sich richtig ausloggt.

    Wenn die Session abgelaufen ist, steht die Session immernoch in der DB
    Das ist die Function, die beim ausloggen ausgeführt wird.
    PHP-Code:

    function logout()
    {
        
    $sql="UPDATE tbl_user
        SET UserSession=NULL
        WHERE UserSession='"
    .session_id()."'";
         
    mysql_query($sql);

    NUr wie kann ich es machen, dass das Query ausgeführt wird, bevor die UserSession abläuft oder die Person die Seite ohne logout schließt?????


  • #2
    Du musst bei jedem User noch den Zeitpunkt der letzten Aktivität speichern. Dann kannst du alle "löschen", deren letzte Aktivität länger als x Minuten her ist
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Original geschrieben von mrhappiness
      Du musst bei jedem User noch den Zeitpunkt der letzten Aktivität speichern. Dann kannst du alle "löschen", deren letzte Aktivität länger als x Minuten her ist
      hört sich klug an, aber wie wird es umgesetzt?!

      ICh stell mir vor die aktivität einzutragen, wenn er sic heingeloggt hat, aber weiter wüsste ich nicht, wie ich vorgehen sollte... wie und wann prüft er z.B. die aktivität oder wann soll sie wieder aktualisiert werden?!

      Kommentar


      • #4
        Letzte_Aktion ist vom Typ DATETIME.
        Diese beiden Querys müssen am Anfang jeden Skriptes ausgeführt werden

        PHP-Code:
            // Online Status der User aktualisieren
            
        if(isset($_SESSION['UserID'])){
                
        $sql "UPDATE
                      User
                   SET
                    Letzte_Aktion = NOW()
                   WHERE
                      ID = "
        .$_SESSION['UserID']."
                        "
        ;
                
        doQuery($sql);
            }
            
        /* Session['UserID'] enthält die ID des Users,
             * sie wird beim einloggen des Users in der Session gespeichert.
             * bei jedem Aufruf irgendeiner Seite wird die Spalte 
             * 'Letzte_Aktion' aktualisiert.
            */

            //Userdaten der User korrigieren, die sich nicht ausgeloggt haben
            
        $sql "UPDATE
                         User,
               SET
                        SessionID = NULL,
               WHERE
                  DATE_SUB(NOW(), INTERVAL 30 MINUTE) > Letzte_Aktion 
                   "
        ;
            
        doQuery($sql);
            
        /* Bei jedem Aufruft wird geprüft, ob ein User eingeloggt ist,
             * obwohl er schon über 30 Min nichts mehr gemacht hat
             * (sprich seine Letzte_Aktion nich geupdatet hat).
             * wurde ein User gefunden, wird die SessionID, die in der Tabelle
             * des Users gespeichert ist, gelöscht.
             * Konsequenterweise muss man nun auch dafür für sorgen, 
             * dass auch die entsprechende Session gelöscht wird. Da ich aber dein
             * Sessionverwaltungssystem nicht kenne, kann ich dazu nichts sagen.
            */ 
        PHP Forum
        Sessions in PHP
        Loginsystem mit PHP erstellen

        Kommentar


        • #5
          oh danke. sowas hab ich schon lang gesucht

          Kommentar


          • #6
            http://de2.php.net/manual/de/functio...dler.php#60316
            Slava
            bituniverse.com

            Kommentar


            • #7
              Original geschrieben von Hirnhamster
              Letzte_Aktion ist vom Typ DATETIME.
              Diese beiden Querys müssen am Anfang jeden Skriptes ausgeführt werden

              PHP-Code:
                  // Online Status der User aktualisieren

                  //Userdaten der User korrigieren, die sich nicht ausgeloggt haben
                  
              $sql "UPDATE
                               User,
                     SET
                              SessionID = NULL,
                     WHERE
                        DATE_SUB(NOW(), INTERVAL 30 MINUTE) > Letzte_Aktion 
                         "
              ;
                  
              doQuery($sql);

                  */ 
              Dieser Teil will bei mir nicht. Es erscheint der Fehler, dass die
              Function doQuery nicht funktioniert. Daraufhin habe ich es so
              modelliert:

              PHP-Code:
              mysql_query ('UPDATE tbl_user SET UserSession = NULL WHERE 
              DATE_SUB(NOW(), INTERVAL 2 MINUTE) > Letzte_Aktion'
              ) or 
              die(
              mysql_error()); 
              Nun ershceint aber wiederum ne Fehlermeldung bezüglich der Syntax.

              You have an error in your SQL syntax; check the manual that
              corresponds to your MySQL server version for the right syntax to
              use near 'SET UserSession = NULL WHERE DATE_SUB(NOW(),
              INTERVAL 2 MINUTE) > Letzte_Aktion' at line 1
              Gibt es lösungsvorschläge?? Danke im voraus

              Kommentar


              • #8
                PHP-Code:
                  mysql_query ('UPDATE `tbl_user` SET `Letzte_Aktion` = 
                NOW() WHERE `nickname` =  \'".$name."\' LIMIT 1;'
                ) or 
                die(
                mysql_error()); 
                Mein SQL Query ist wird so nicht ausgeführt und gibt keine Fehlermeldung aus.
                in der Variable $bane ist ebenfalls was vorhanden.
                Wenn ich jedoch $name durch einen festen nicknamen einsetze, dann wird das Query ausgeführt.

                Woran liegt es?
                Es wird ja nicht einmal eine Fehlermeldung ausgegeben.

                Ich bin verzweifelt. Nun sitze ich schon seit 2h an dem Problem herum!

                Kommentar


                • #9
                  EDIT:

                  Sorry, da war ich zu hastig mit dem Senden Button.

                  Zuletzt geändert von hhcm; 21.12.2006, 10:44.
                  gruss Chris

                  [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                  Kommentar


                  • #10
                    in der Variable $bane ist ebenfalls was vorhanden.
                    Ich seh nix von $bane...

                    Ausserdem solltest du dir mal über single und Doublequotes im klaren werden.

                    Das was du da machst müsste einen Parse Error ausgeben.
                    gruss Chris

                    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                    Kommentar


                    • #11
                      doQuery ist ne Funtkion von mir, weil ich den nicht bei jedem Query
                      mysql_query($sql) OR die("<pre>".$sql."</pre>".mysql_error());

                      schreiben wollte

                      PHP-Code:
                              // Führt einen SQL-Query aus und gibt im Fehlerfall eine Fehlermeldung aus
                          
                      function doQuery($sql)
                          {
                              
                      $result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                              return 
                      $result;
                          } 
                      PHP Forum
                      Sessions in PHP
                      Loginsystem mit PHP erstellen

                      Kommentar


                      • #12
                        Original geschrieben von Hirnhamster
                        doQuery ist ne Funtkion von mir, weil ich den nicht bei jedem Query
                        mysql_query($sql) OR die("<pre>".$sql."</pre>".mysql_error());

                        schreiben wollte

                        PHP-Code:
                                // Führt einen SQL-Query aus und gibt im Fehlerfall eine Fehlermeldung aus
                            
                        function doQuery($sql)
                            {
                                
                        $result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                                return 
                        $result;
                            } 

                        Hab mich schon gewundert....

                        Kommentar


                        • #13
                          naja, da hätte man jetzt auch selbst drauf kommen können ich hab den Code ja nur von nem Script von mir copied & pasted
                          PHP Forum
                          Sessions in PHP
                          Loginsystem mit PHP erstellen

                          Kommentar

                          Lädt...
                          X