setTableName(TABLE_PREFIX.'UserSession'); $this->SessionDataTable = TABLE_PREFIX.'SessionData'; $this->setIDField('SessionKey'); $this->TimestampField = 'LastAccessed'; $this->DataValueField = 'VariableValue'; $this->DataVarField = 'VariableName'; } function LocateSession($sid) { $query = ' SELECT '.$this->TimestampField.' FROM '.$this->TableName.' WHERE '.$this->IDField.' = '.$this->Conn->qstr($sid); $result = $this->Conn->GetOne($query); if($result===false) return false; $this->Expiration = $result + $this->SessionTimeout; return true; } function UpdateSession(&$session) { $query = ' UPDATE '.$this->TableName.' SET '.$this->TimestampField.' = unix_timestamp() WHERE '.$this->IDField.' = '.$this->Conn->qstr($session->SID); $this->Conn->Query($query); } function GetExpiredSIDs() { $query = ' SELECT '.$this->IDField.' FROM '.$this->TableName.' WHERE '.time().' - '.$this->TimestampField.' > '.$this->SessionTimeout; $ret = $this->Conn->GetCol($query); if($ret) $this->DeleteEditTables(); return $ret; } function DeleteEditTables() { $tables = $this->Conn->GetCol('SHOW TABLES'); $mask = '/'.TABLE_PREFIX.'ses_(.*)_edit_(.*)/'; $sql='SELECT COUNT(*) FROM '.$this->TableName.' WHERE '.$this->IDField.' = \'%s\''; foreach($tables as $table) { if( preg_match($mask,$table,$rets) ) { $sid=$rets[1]; $is_alive = $this->Conn->GetOne( sprintf($sql,$sid) ); if(!$is_alive) $this->Conn->Query('DROP TABLE IF EXISTS '.$table); } } } } ?>