Sessionhandler will die Session nicht löschen

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

  • Sessionhandler will die Session nicht löschen

    Hallo,

    wir haben hier um die Sessions zu handeln ne eigene Klasse gebaut, nur leider will die die ausgelaufenen Sessions nicht aus der DB nehmen...

    PHP-Code:
    class SessionDbUser extends Session {
        var 
    $_rDB;
        var 
    $_wDB;
        
        function 
    SessionDbUser($db) {
            
    $this->_rDB $db;
            
    $this->_wDB $db;
            if (
    session_id() != ''session_write_close();
            
    register_shutdown_function('session_write_close');
            
    session_set_save_handler(    array(&$this'_hdlOpen'),
                                        array(&
    $this'_hdlClose'),
                                        array(&
    $this'_hdlRead'),
                                        array(&
    $this'_hdlWrite'),
                                        array(&
    $this'_hdlDestroy'),
                                        array(&
    $this'_hdlGc')
                                    );
            
    $this->Session();
        }

        function 
    getVisitorCnt() {
            
    $result $this->_rDB->query('SELECT COUNT(*) as cnt FROM sessions WHERE user = 0');
            if (!
    $result->isValid() || !($row $result->getNextRow())) return FALSE;
            return 
    $row[0];
        }

        function 
    getMemberCnt() {
            
    $result $this->_rDB->query('SELECT COUNT(*) as cnt FROM sessions WHERE user != 0');
            if (!
    $result->isValid() || !($row $result->getNextRow())) return FALSE;
            return 
    $row[0];
        }

        function 
    _hdlOpen() {
    //        $this->_hdlGc(0);
        
    }

        function 
    _hdlClose() {
        }

        function 
    _hdlRead($id) {
            
    $query 'SELECT data FROM sessions WHERE id=\'%1$s\' LIMIT 1';
            
    $result $this->_rDB->query(sprintf($query$this->_rDB->escape($id)));
            
            if (!
    $result->isValid() || !($row $result->getNextRow())) return '';
            
            return 
    $row[0];
        }

        function 
    _hdlWrite($id$data) {
            
    $query 'SELECT data FROM sessions WHERE id=\'%1$s\' LIMIT 1';
            
    $result $this->_rDB->query(sprintf($query$this->_rDB->escape($id)));
            if (!
    $result->isValid()) return FALSE;

            
    $user = isset($GLOBALS['AUTH']) ? $GLOBALS['AUTH']->getUserId() : 0;
            
            if (
    $result->count() != 1) {
                
    $query    'INSERT INTO sessions (id, data, user, time, start) VALUES(\'%1$s\', \'%2$s\', \'%3$d\', \'%4$d\', \'%5$d\')';
                
    $result    $this->_wDB->query(sprintf($query,    $this->_wDB->escape($id),
                                                                
    $this->_wDB->escape($data),
                                                                
    $this->_wDB->escape($user),
                                                                
    $this->_wDB->escape(time()),
                                                                
    $this->_wDB->escape(time())
                                            ));
                return 
    $result->isValid();
            }
            
            
    $query    'UPDATE sessions SET data=\'%2$s\', user=\'%3$d\', time=\'%4$d\' WHERE id=\'%1$s\' LIMIT 1';
            
    $result    $this->_wDB->query(sprintf($query,    $this->_wDB->escape($id),
                                                            
    $this->_wDB->escape($data),
                                                            
    $this->_wDB->escape($user),
                                                            
    $this->_wDB->escape(time())
                                        ));
            return 
    $result->isValid();
        }

        function 
    _hdlDestroy($id) {
            
    $query 'DELETE FROM sessions WHERE id=\'%1$s\' LIMIT 1';
            
    $result $this->_wDB->query(sprintf($query$this->_wDB->escape($id)));
            return 
    $result->isValid();
        }

        function 
    _hdlGc($maxlifetime) {
            
    $query 'DELETE FROM sessions WHERE time < \'%1$d\'';
            
    $result $this->_wDB->query(sprintf($query$this->_wDB->escape(time() - $maxlifetime)));
            return 
    $result->isValid();
        }

    SessionDbUser::_hdlGC() löscht die abgelaufenen Sessions!

  • #2
    Was tut er denn stattdessen? Fehlermeldung? etc.?

    Wird SessionDbUser::_hdlGC() überhaupt ausgeführt?

    Kommentar


    • #3
      Zumal die func in deinem Beispiel auch auskommentiert ist.

      Kommentar


      • #4
        Nein so wies aussieht geht er gar nicht in die Funktion rein. Und der Kommentar hat damit zu tun, dass wir einfach mal ausprobiern wollten, ob er in die Funktion geht. Öffnen die Session und schließen sie sofort wieder, aber macht er nicht!

        Kommentar


        • #5
          Nein so wies aussieht geht er gar nicht in die Funktion rein.
          Ja dann finde des dochmal raus.

          Mit nem echo z.B.

          Kommentar


          • #6
            Jo also wenn ich den Komentar weg nehme denn gehts, aber müsste ja an sich auch so gehen!

            Kommentar


            • #7
              Original geschrieben von Proggy
              Jo also wenn ich den Komentar weg nehme denn gehts, aber müsste ja an sich auch so gehen!
              ???
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Wieso sollte es auch so gehen?

                Wo wird die Func denn aufgerufen? In der Session class nehm ich mal an.

                Ich blick da nicht so ganz durch was jetzt dein Problem ist.

                Kommentar

                Lädt...
                X