class MockFileSessionStorage

MockFileSessionStorage is used to mock sessions for functional testing when done in a single PHP process.

No PHP session is actually started since a session can be initialized and shutdown only once per PHP execution cycle and this class does not pollute any session related globals, including session_*() functions or session.* PHP ini directives.

@author Drak <drak@zikula.org>

Hierarchy

Expanded class hierarchy of MockFileSessionStorage

1 file declares its use of MockFileSessionStorage
MockFileSessionStorageTest.php in drupal/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Tests/Session/Storage/MockFileSessionStorageTest.php

File

drupal/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MockFileSessionStorage.php, line 25

Namespace

Symfony\Component\HttpFoundation\Session\Storage
View source
class MockFileSessionStorage extends MockArraySessionStorage {

  /**
   * @var string
   */
  private $savePath;

  /**
   * @var array
   */
  private $sessionData;

  /**
   * Constructor.
   *
   * @param string      $savePath Path of directory to save session files.
   * @param string      $name     Session name.
   * @param MetadataBag $metaBag  MetadataBag instance.
   */
  public function __construct($savePath = null, $name = 'MOCKSESSID', MetadataBag $metaBag = null) {
    if (null === $savePath) {
      $savePath = sys_get_temp_dir();
    }
    if (!is_dir($savePath)) {
      mkdir($savePath, 0777, true);
    }
    $this->savePath = $savePath;
    parent::__construct($name, $metaBag);
  }

  /**
   * {@inheritdoc}
   */
  public function start() {
    if ($this->started) {
      return true;
    }
    if (!$this->id) {
      $this->id = $this
        ->generateId();
    }
    $this
      ->read();
    $this->started = true;
    return true;
  }

  /**
   * {@inheritdoc}
   */
  public function regenerate($destroy = false, $lifetime = null) {
    if (!$this->started) {
      $this
        ->start();
    }
    if ($destroy) {
      $this
        ->destroy();
    }
    return parent::regenerate($destroy, $lifetime);
  }

  /**
   * {@inheritdoc}
   */
  public function save() {
    file_put_contents($this
      ->getFilePath(), serialize($this->data));

    // this is needed for Silex, where the session object is re-used across requests
    // in functional tests. In Symfony, the container is rebooted, so we don't have
    // this issue
    $this->started = false;
  }

  /**
   * Deletes a session from persistent storage.
   * Deliberately leaves session data in memory intact.
   */
  private function destroy() {
    if (is_file($this
      ->getFilePath())) {
      unlink($this
        ->getFilePath());
    }
  }

  /**
   * Calculate path to file.
   *
   * @return string File path
   */
  private function getFilePath() {
    return $this->savePath . '/' . $this->id . '.mocksess';
  }

  /**
   * Reads session from storage and loads session.
   */
  private function read() {
    $filePath = $this
      ->getFilePath();
    $this->data = is_readable($filePath) && is_file($filePath) ? unserialize(file_get_contents($filePath)) : array();
    $this
      ->loadSession();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MockArraySessionStorage::$bags protected property
MockArraySessionStorage::$closed protected property
MockArraySessionStorage::$data protected property
MockArraySessionStorage::$id protected property
MockArraySessionStorage::$metadataBag protected property
MockArraySessionStorage::$name protected property
MockArraySessionStorage::$started protected property
MockArraySessionStorage::clear public function Clear all session data in memory. Overrides SessionStorageInterface::clear
MockArraySessionStorage::generateId protected function Generates a session ID.
MockArraySessionStorage::getBag public function Gets a SessionBagInterface by name. Overrides SessionStorageInterface::getBag
MockArraySessionStorage::getId public function Returns the session ID Overrides SessionStorageInterface::getId
MockArraySessionStorage::getMetadataBag public function Gets the MetadataBag. Overrides SessionStorageInterface::getMetadataBag
MockArraySessionStorage::getName public function Returns the session name Overrides SessionStorageInterface::getName
MockArraySessionStorage::isStarted public function Checks if the session is started. Overrides SessionStorageInterface::isStarted
MockArraySessionStorage::loadSession protected function
MockArraySessionStorage::registerBag public function Registers a SessionBagInterface for use. Overrides SessionStorageInterface::registerBag
MockArraySessionStorage::setId public function Sets the session ID Overrides SessionStorageInterface::setId
MockArraySessionStorage::setMetadataBag public function Sets the MetadataBag.
MockArraySessionStorage::setName public function Sets the session name Overrides SessionStorageInterface::setName
MockArraySessionStorage::setSessionData public function Sets the session data.
MockFileSessionStorage::$savePath private property
MockFileSessionStorage::$sessionData private property
MockFileSessionStorage::destroy private function Deletes a session from persistent storage. Deliberately leaves session data in memory intact.
MockFileSessionStorage::getFilePath private function Calculate path to file.
MockFileSessionStorage::read private function Reads session from storage and loads session.
MockFileSessionStorage::regenerate public function Regenerates id that represents this storage. Overrides MockArraySessionStorage::regenerate
MockFileSessionStorage::save public function Force the session to be saved and closed. Overrides MockArraySessionStorage::save
MockFileSessionStorage::start public function Starts the session. Overrides MockArraySessionStorage::start
MockFileSessionStorage::__construct public function Constructor. Overrides MockArraySessionStorage::__construct