Example #1
0
 /**
  * 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);
 }