setName($name); $this->_setCookieParameters(); session_set_save_handler(array(&$this, '_custom_open'), array(&$this, '_custom_close'), array(&$this, '_custom_read'), array(&$this, '_custom_write'), array(&$this, '_custom_destroy'), array(&$this, '_custom_gc')); } /** * Opens the database based session storage handler * * @access protected */ protected function _custom_open() { return true; } /** * Closes the database based session storage handler * * @access protected */ protected function _custom_close() { return true; } /** * Read session data from the database based session storage handler * * @access protected */ protected function _custom_read($key) { global $osC_Database; $Qsession = $osC_Database->query('select value from :table_sessions where sesskey = :sesskey and expiry > :expiry limit 1'); $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':sesskey', $key); $Qsession->bindRaw(':expiry', time()); $Qsession->execute(); if ( $Qsession->numberOfRows() === 1 ) { $value = $Qsession->value('value'); $Qsession->freeResult(); return $value; } return false; } /** * Writes session data to the database based session storage handler * * @access protected */ protected function _custom_write($key, $value) { global $osC_Database; if ( !$SESS_LIFE = (int)ini_get('session.gc_maxlifetime') ) { $SESS_LIFE = 1440; } $expiry = time() + $SESS_LIFE; $Qsession = $osC_Database->query('select sesskey from :table_sessions where sesskey = :sesskey limit 1'); $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':sesskey', $key); $Qsession->execute(); if ( $Qsession->numberOfRows() === 1 ) { $Qsession = $osC_Database->query('update :table_sessions set expiry = :expiry, value = :value where sesskey = :sesskey'); } else { $Qsession = $osC_Database->query('insert into :table_sessions values (:sesskey, :expiry, :value)'); } $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':sesskey', $key); $Qsession->bindValue(':expiry', $expiry); $Qsession->bindValue(':value', $value); $Qsession->execute(); return ( $Qsession->affectedRows() === 1 ); } /** * Deletes the session data from the database based session storage handler * * @access protected */ protected function _custom_destroy($key) { global $osC_Database; $Qsession = $osC_Database->query('delete from :table_sessions where sesskey = :sesskey'); $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':sesskey', $key); $Qsession->execute(); } /** * Garbage collector for the database based session storage handler * * @access protected */ protected function _custom_gc($maxlifetime) { global $osC_Database; $Qsession = $osC_Database->query('delete from :table_sessions where expiry < :expiry'); $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':expiry', time()); $Qsession->execute(); } /** * Deletes the session data from the database based session storage handler * * @access protected * @see _custom_destroy() */ protected function _delete() { } } ?>