query('select value from :table_sessions where sesskey = :sesskey'); if ( SERVICE_SESSION_EXPIRATION_TIME > 0 ) { $Qsession->appendQuery('and expiry > :expiry'); $Qsession->bindInt(':expiry', time()); } $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':sesskey', $id); $Qsession->execute(); if ( $Qsession->numberOfRows() === 1 ) { return $Qsession->value('value'); } return false; } /** * Writes session data to the database based session storage handler * * @param string $id The ID of the session * @param string $value The session data to store * @access protected */ protected function _custom_write($id, $value) { global $osC_Database; $Qsession = $osC_Database->query('select sesskey from :table_sessions where sesskey = :sesskey'); $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':sesskey', $id); $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->bindInt(':expiry', time() + (SERVICE_SESSION_EXPIRATION_TIME * 60)); $Qsession->bindValue(':value', $value); $Qsession->bindValue(':sesskey', $id); $Qsession->execute(); return ( $Qsession->affectedRows() === 1 ); } /** * Destroys the session data from the database based session storage handler * * @param string $id The ID of the session * @access protected */ protected function _custom_destroy($id) { return $this->delete($id); } /** * Garbage collector for the database based session storage handler * * @param string $max_life_time The maxmimum time a session should exist * @access protected */ protected function _custom_gc($max_life_time) { global $osC_Database; // $max_life_time is already added to the time in the _custom_write method $Qsession = $osC_Database->query('delete from :table_sessions where expiry < :expiry'); $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':expiry', time()); $Qsession->execute(); return ( $Qsession->affectedRows() > 0 ); } /** * Deletes the session data from the database based session storage handler * * @param string $id The ID of the session * @access public */ public function delete($id = null) { global $osC_Database; if ( empty($id) ) { $id = $this->_id; } $Qsession = $osC_Database->query('delete from :table_sessions where sesskey = :sesskey'); $Qsession->bindTable(':table_sessions', TABLE_SESSIONS); $Qsession->bindValue(':sesskey', $id); $Qsession->execute(); return ( $Qsession->affectedRows() === 1 ); } } ?>