class MongoDbSessionHandler

MongoDB session handler

@author Markus Bachmann <markus.bachmann@bachi.biz>

Hierarchy

  • class \Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler implements \Symfony\Component\HttpFoundation\Session\Storage\Handler\SessionHandlerInterface

Expanded class hierarchy of MongoDbSessionHandler

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

File

drupal/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/Handler/MongoDbSessionHandler.php, line 19

Namespace

Symfony\Component\HttpFoundation\Session\Storage\Handler
View source
class MongoDbSessionHandler implements \SessionHandlerInterface {

  /**
   * @var \Mongo
   */
  private $mongo;

  /**
   * @var \MongoCollection
   */
  private $collection;

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

  /**
   * Constructor.
   *
   * @param \Mongo $mongo   A "Mongo" instance
   * @param array  $options An associative array of field options
   *
   * @throws \InvalidArgumentException When "database" or "collection" not provided
   */
  public function __construct(\Mongo $mongo, array $options) {
    if (!isset($options['database']) || !isset($options['collection'])) {
      throw new \InvalidArgumentException('You must provide the "database" and "collection" option for MongoDBSessionHandler');
    }
    $this->mongo = $mongo;
    $this->options = array_merge(array(
      'id_field' => 'sess_id',
      'data_field' => 'sess_data',
      'time_field' => 'sess_time',
    ), $options);
  }

  /**
   * {@inheritDoc}
   */
  public function open($savePath, $sessionName) {
    return true;
  }

  /**
   * {@inheritDoc}
   */
  public function close() {
    return true;
  }

  /**
   * {@inheritDoc}
   */
  public function destroy($sessionId) {
    $this
      ->getCollection()
      ->remove(array(
      $this->options['id_field'] => $sessionId,
    ), array(
      'justOne' => true,
    ));
    return true;
  }

  /**
   * {@inheritDoc}
   */
  public function gc($lifetime) {
    $time = new \MongoTimestamp(time() - $lifetime);
    $this
      ->getCollection()
      ->remove(array(
      $this->options['time_field'] => array(
        '$lt' => $time,
      ),
    ));
  }

  /**
   * {@inheritDoc]
   */
  public function write($sessionId, $data) {
    $data = array(
      $this->options['id_field'] => $sessionId,
      $this->options['data_field'] => new \MongoBinData($data, \MongoBinData::BYTE_ARRAY),
      $this->options['time_field'] => new \MongoTimestamp(),
    );
    $this
      ->getCollection()
      ->update(array(
      $this->options['id_field'] => $sessionId,
    ), array(
      '$set' => $data,
    ), array(
      'upsert' => true,
    ));
    return true;
  }

  /**
   * {@inheritDoc}
   */
  public function read($sessionId) {
    $dbData = $this
      ->getCollection()
      ->findOne(array(
      $this->options['id_field'] => $sessionId,
    ));
    return null === $dbData ? '' : $dbData[$this->options['data_field']]->bin;
  }

  /**
   * Return a "MongoCollection" instance
   *
   * @return \MongoCollection
   */
  private function getCollection() {
    if (null === $this->collection) {
      $this->collection = $this->mongo
        ->selectDB($this->options['database'])
        ->selectCollection($this->options['collection']);
    }
    return $this->collection;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MongoDbSessionHandler::$collection private property
MongoDbSessionHandler::$mongo private property
MongoDbSessionHandler::$options private property
MongoDbSessionHandler::close public function
MongoDbSessionHandler::destroy public function
MongoDbSessionHandler::gc public function
MongoDbSessionHandler::getCollection private function Return a "MongoCollection" instance
MongoDbSessionHandler::open public function
MongoDbSessionHandler::read public function
MongoDbSessionHandler::write public function {@inheritDoc]
MongoDbSessionHandler::__construct public function Constructor.