/** * Write a session to the database * * @param string $session_id id of session * @param string $session_data data to store * * @return bool **/ public function write($session_id, $session_data) { $expires = isset($_SESSION['SESSION_MANAGER_EXPIRES']) ? (int) $_SESSION['SESSION_MANAGER_EXPIRES'] : time() + session_cache_expire() * 60; $oldIsolation = $this->db->getTransactionIsolation(); $this->db->setTransactionIsolation(Connection::TRANSACTION_REPEATABLE_READ); $this->db->beginTransaction(); $qb = $this->db->createXoopsQueryBuilder(); $eb = $qb->expr(); $qb->updatePrefix($this->sessionTable)->set('expires_at', ':expires')->set('session_data', ':sessdata')->where($eb->eq('session_id', ':sessid'))->setParameter(':sessid', $session_id, \PDO::PARAM_STR)->setParameter(':expires', $expires, \PDO::PARAM_INT)->setParameter(':sessdata', $session_data, \PDO::PARAM_STR); $this->db->setForce(true); $result = $qb->execute(); if ($result <= 0) { $qb = $this->db->createXoopsQueryBuilder(); $qb->insertPrefix($this->sessionTable)->values(array('session_id' => ':sessid', 'expires_at' => ':expires', 'session_data' => ':sessdata'))->setParameter(':sessid', $session_id, \PDO::PARAM_STR)->setParameter(':expires', $expires, \PDO::PARAM_INT)->setParameter(':sessdata', $session_data, \PDO::PARAM_STR); $this->db->setForce(true); $result = $qb->execute(); } $this->db->commit(); $this->db->setTransactionIsolation($oldIsolation); return (bool) ($result > 0); }