max_life_time = $max_life_time; $this->db = new lmbSimpleDb($db_connection); } /** * @see lmbSessionStorage :: install() * @return void */ function install() { session_set_save_handler( array($this, 'storageOpen'), array($this, 'storageClose'), array($this, 'storageRead'), array($this, 'storageWrite'), array($this, 'storageDestroy'), array($this, 'storageGc') ); } /** * Opens session storage * Does nothing and returns true * @return boolean */ function storageOpen() { return true; } /** * Closes session storage * Does nothing and returns true * @return boolean */ function storageClose() { return true; } /** * Read a single row from sys_session db table and returns session_data column * @param string session ID * @return mixed */ function storageRead($session_id) { $rs = $this->db->select('sys_session', new lmbSQLFieldCriteria('session_id', $session_id)); $rs->rewind(); if($rs->valid()) return $rs->current()->get('session_data'); else return false; } /** * Creates new or updates existing row in sys_session db table * @param string session ID * @param mixed session data * @return void */ function storageWrite($session_id, $value) { $crit = new lmbSQLFieldCriteria('session_id', $session_id); $rs = $this->db->select('sys_session', $crit); $data = array('last_activity_time' => time(), 'session_data' => $value); if($rs->count() > 0) $this->db->update('sys_session', $data, $crit); else { $data['session_id'] = "{$session_id}"; $this->db->insert('sys_session', $data, null); } } /** * Removed a row from sys_session db table * @param string session ID * @return void */ function storageDestroy($session_id) { $this->db->delete('sys_session', new lmbSQLFieldCriteria('session_id', $session_id)); } /** * Checks if storage is still valid. If session if not valid - removes it's row from sys_session db table * Prefers class attribute {@link $max_life_time} if it's not NULL. * @param integer system session max life time * @return void */ function storageGc($max_life_time) { if($this->max_life_time) $max_life_time = $this->max_life_time; $this->db->delete('sys_session', new lmbSQLFieldCriteria('last_activity_time', time() - $max_life_time, lmbSQLFieldCriteria::LESS)); } } ?>