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));
}
}
?>