/**
  * {@inheritdoc}
  */
 public function start()
 {
     if ($this->started && !$this->closed) {
         return true;
     }
     if (version_compare(phpversion(), '5.4.0', '>=') && \PHP_SESSION_ACTIVE === session_status()) {
         throw new \RuntimeException('Failed to start the session: already started by PHP.');
     }
     if (version_compare(phpversion(), '5.4.0', '<') && isset($_SESSION) && session_id()) {
         // not 100% fool-proof, but is the most reliable way to determine if a session is active in PHP 5.3
         throw new \RuntimeException('Failed to start the session: already started by PHP ($_SESSION is set).');
     }
     if (ini_get('session.use_cookies') && headers_sent($file, $line)) {
         throw new \RuntimeException(sprintf('Failed to start the session because headers have already been sent by "%s" at line %d.', $file, $line));
     }
     // ok to try and start the session
     if (!session_start()) {
         throw new \RuntimeException('Failed to start the session');
     }
     $this->loadSession();
     if (!$this->saveHandler->isWrapper() && !$this->saveHandler->isSessionHandlerInterface()) {
         // This condition matches only PHP 5.3 with internal save handlers
         $this->saveHandler->setActive(true);
     }
     return true;
 }
 /**
  * {@inheritdoc}
  */
 public function save()
 {
     session_write_close();
     if (!$this->saveHandler->isWrapper() && !$this->saveHandler->isSessionHandlerInterface()) {
         // This condition matches only PHP 5.3 with internal save handlers
         $this->saveHandler->setActive(false);
     }
     $this->closed = true;
 }
Ejemplo n.º 3
0
 /**
  * {@inheritdoc}
  */
 public function start()
 {
     if ($this->started && !$this->closed) {
         return true;
     }
     // catch condition where session was started automatically by PHP
     if (!$this->started && !$this->closed && $this->saveHandler->isActive() && $this->saveHandler->isSessionHandlerInterface()) {
         $this->loadSession();
         return true;
     }
     if (ini_get('session.use_cookies') && headers_sent()) {
         throw new \RuntimeException('Failed to start the session because headers have already been sent.');
     }
     // start the session
     if (!session_start()) {
         throw new \RuntimeException('Failed to start the session');
     }
     $this->loadSession();
     if (!$this->saveHandler->isWrapper() && !$this->saveHandler->isSessionHandlerInterface()) {
         $this->saveHandler->setActive(false);
     }
     return true;
 }
Ejemplo n.º 4
0
 public function testIsSessionHandlerInterface()
 {
     $this->assertFalse($this->proxy->isSessionHandlerInterface());
     $sh = new ConcreteSessionHandlerInterfaceProxy();
     $this->assertTrue($sh->isSessionHandlerInterface());
 }