public function read($id) { if (!$this->session_broken) { try { $query = new Query($this->dbconnection); if ($this->write) { // We know we are writing, so get a "FOR UPDATE" lock if (!$this->lock) { // First time we do this, start a transaction! $query->transaction(); $this->lock = true; } $query->sql("SELECT sessiondata, expiry FROM `" . static::$tablename . "` WHERE id = ? FOR UPDATE", $id); } else { // No Lock for Read only! $query->sql("SELECT sessiondata, expiry FROM `" . static::$tablename . "` WHERE id = ?", $id); } list(list($row)) = $query->execute(); } catch (\Automatorm\Exception\Database $e) { $this->session_broken = true; throw new Exception\Session('READ', $e); } // If not expired, get sessiondata if ($row['expiry'] > time()) { $data = $row['sessiondata']; } else { $data = ''; } return (string) $data; } }