db = $db; } function open($savePath, $name) { return TRUE; } function close() { return TRUE; } function read($sessionId) { $sessionData = $this->db->getValue( 'SELECT data FROM userSession WHERE ssid = #', [$sessionId]); return isset($sessionData) ? $sessionData : ''; } function write($sessionId, $sessionData) { $session = $this->db->getObject( 'SELECT data, lastUpdate < (NOW() - INTERVAL # SECOND) hasToRefresh FROM userSession WHERE ssid = #', [self::UPDATE_INTERVAL, $sessionId] ); if (!isset($session) || $sessionData !== $session->data || $session->hasToRefresh) { $this->db->query( 'INSERT INTO userSession SET ssid = #, data = #, lastUpdate = NOW() ON DUPLICATE KEY UPDATE data = VALUES(data), lastUpdate = VALUES(lastUpdate)', [$sessionId, $sessionData]); } return TRUE; } function destroy($sessionId) { $this->db->query('DELETE FROM userSession WHERE ssid = #', [$sessionId]); return TRUE; } function gc($maxLifeTime) { $this->db->query('DELETE FROM userSession WHERE lastUpdate < (NOW() - INTERVAL # SECOND)', [$maxLifeTime + self::UPDATE_INTERVAL + 1] ); return TRUE; } }