vendor/symfony/http-foundation/Session/Session.php line 253

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\HttpFoundation\Session;
  11. use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
  12. use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBagInterface;
  13. use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
  14. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  15. use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
  16. use Symfony\Component\HttpFoundation\Session\Storage\SessionStorageInterface;
  17. /**
  18.  * @author Fabien Potencier <fabien@symfony.com>
  19.  * @author Drak <drak@zikula.org>
  20.  */
  21. class Session implements SessionInterface, \IteratorAggregate, \Countable {
  22.     protected $storage;
  23.     private $flashName;
  24.     private $attributeName;
  25.     private $data = [];
  26.     private $usageIndex 0;
  27.     /**
  28.      * @param SessionStorageInterface $storage    A SessionStorageInterface instance
  29.      * @param AttributeBagInterface   $attributes An AttributeBagInterface instance, (defaults null for default AttributeBag)
  30.      * @param FlashBagInterface       $flashes    A FlashBagInterface instance (defaults null for default FlashBag)
  31.      */
  32.     public function __construct(SessionStorageInterface $storage nullAttributeBagInterface $attributes nullFlashBagInterface $flashes null) {
  33.         $this->storage $storage ?: new NativeSessionStorage();
  34.         $attributes $attributes ?: new AttributeBag();
  35.         $this->attributeName $attributes->getName();
  36.         $this->registerBag($attributes);
  37.         $flashes $flashes ?: new FlashBag();
  38.         $this->flashName $flashes->getName();
  39.         $this->registerBag($flashes);
  40.     }
  41.     /**
  42.      * {@inheritdoc}
  43.      */
  44.     public function start() {
  45.         return $this->storage->start();
  46.     }
  47.     /**
  48.      * {@inheritdoc}
  49.      */
  50.     public function has($name) {
  51.         return $this->getAttributeBag()->has($name);
  52.     }
  53.     /**
  54.      * {@inheritdoc}
  55.      */
  56.     public function get($name$default null) {
  57.         return $this->getAttributeBag()->get($name$default);
  58.     }
  59.     /**
  60.      * {@inheritdoc}
  61.      */
  62.     public function set($name$value) {
  63.         $this->getAttributeBag()->set($name$value);
  64.     }
  65.     /**
  66.      * {@inheritdoc}
  67.      */
  68.     public function all() {
  69.         return $this->getAttributeBag()->all();
  70.     }
  71.     /**
  72.      * {@inheritdoc}
  73.      */
  74.     public function replace(array $attributes) {
  75.         $this->getAttributeBag()->replace($attributes);
  76.     }
  77.     /**
  78.      * {@inheritdoc}
  79.      */
  80.     public function remove($name) {
  81.         return $this->getAttributeBag()->remove($name);
  82.     }
  83.     /**
  84.      * {@inheritdoc}
  85.      */
  86.     public function clear() {
  87.         $this->getAttributeBag()->clear();
  88.     }
  89.     /**
  90.      * {@inheritdoc}
  91.      */
  92.     public function isStarted() {
  93.         return $this->storage->isStarted();
  94.     }
  95.     /**
  96.      * Returns an iterator for attributes.
  97.      *
  98.      * @return \ArrayIterator An \ArrayIterator instance
  99.      */
  100.     public function getIterator() {
  101.         return new \ArrayIterator($this->getAttributeBag()->all());
  102.     }
  103.     /**
  104.      * Returns the number of attributes.
  105.      *
  106.      * @return int The number of attributes
  107.      */
  108.     public function count() {
  109.         return \count($this->getAttributeBag()->all());
  110.     }
  111.     /**
  112.      * @return int
  113.      *
  114.      * @internal
  115.      */
  116.     public function getUsageIndex() {
  117.         return $this->usageIndex;
  118.     }
  119.     /**
  120.      * @return bool
  121.      *
  122.      * @internal
  123.      */
  124.     public function isEmpty() {
  125.         if ($this->isStarted()) {
  126.             ++$this->usageIndex;
  127.         }
  128.         foreach ($this->data as &$data) {
  129.             if (!empty($data)) {
  130.                 return false;
  131.             }
  132.         }
  133.         return true;
  134.     }
  135.     /**
  136.      * {@inheritdoc}
  137.      */
  138.     public function invalidate($lifetime null) {
  139.         $this->storage->clear();
  140.         return $this->migrate(true$lifetime);
  141.     }
  142.     /**
  143.      * {@inheritdoc}
  144.      */
  145.     public function migrate($destroy false$lifetime null) {
  146.         return $this->storage->regenerate($destroy$lifetime);
  147.     }
  148.     /**
  149.      * {@inheritdoc}
  150.      */
  151.     public function save() {
  152.         $this->storage->save();
  153.     }
  154.     /**
  155.      * {@inheritdoc}
  156.      */
  157.     public function getId() {
  158.         return $this->storage->getId();
  159.     }
  160.     /**
  161.      * {@inheritdoc}
  162.      */
  163.     public function setId($id) {
  164.         if ($this->storage->getId() !== $id) {
  165.             $this->storage->setId($id);
  166.         }
  167.     }
  168.     /**
  169.      * {@inheritdoc}
  170.      */
  171.     public function getName() {
  172.         return $this->storage->getName();
  173.     }
  174.     /**
  175.      * {@inheritdoc}
  176.      */
  177.     public function setName($name) {
  178.         $this->storage->setName($name);
  179.     }
  180.     /**
  181.      * {@inheritdoc}
  182.      */
  183.     public function getMetadataBag() {
  184.         ++$this->usageIndex;
  185.         return $this->storage->getMetadataBag();
  186.     }
  187.     /**
  188.      * {@inheritdoc}
  189.      */
  190.     public function registerBag(SessionBagInterface $bag) {
  191.         $this->storage->registerBag(new SessionBagProxy($bag$this->data$this->usageIndex));
  192.     }
  193.     /**
  194.      * {@inheritdoc}
  195.      */
  196.     public function getBag($name) {
  197.         $bag $this->storage->getBag($name);
  198.         return method_exists($bag'getBag') ? $bag->getBag() : $bag;
  199.     }
  200.     /**
  201.      * Gets the flashbag interface.
  202.      *
  203.      * @return FlashBagInterface
  204.      */
  205.     public function getFlashBag() {
  206.         return $this->getBag($this->flashName);
  207.     }
  208.     /**
  209.      * Gets the attributebag interface.
  210.      *
  211.      * Note that this method was added to help with IDE autocompletion.
  212.      *
  213.      * @return AttributeBagInterface
  214.      */
  215.     private function getAttributeBag() {
  216.         return $this->getBag($this->attributeName);
  217.     }
  218. }