Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\HttpFoundation\Session\Storage; Chris@0: Chris@0: use Symfony\Component\HttpFoundation\Session\SessionBagInterface; Chris@0: Chris@0: /** Chris@0: * Metadata container. Chris@0: * Chris@0: * Adds metadata to the session. Chris@0: * Chris@0: * @author Drak Chris@0: */ Chris@0: class MetadataBag implements SessionBagInterface Chris@0: { Chris@0: const CREATED = 'c'; Chris@0: const UPDATED = 'u'; Chris@0: const LIFETIME = 'l'; Chris@0: Chris@0: /** Chris@0: * @var string Chris@0: */ Chris@0: private $name = '__metadata'; Chris@0: Chris@0: /** Chris@0: * @var string Chris@0: */ Chris@0: private $storageKey; Chris@0: Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@17: protected $meta = [self::CREATED => 0, self::UPDATED => 0, self::LIFETIME => 0]; Chris@0: Chris@0: /** Chris@0: * Unix timestamp. Chris@0: * Chris@0: * @var int Chris@0: */ Chris@0: private $lastUsed; Chris@0: Chris@0: /** Chris@0: * @var int Chris@0: */ Chris@0: private $updateThreshold; Chris@0: Chris@0: /** Chris@0: * @param string $storageKey The key used to store bag in the session Chris@0: * @param int $updateThreshold The time to wait between two UPDATED updates Chris@0: */ Chris@0: public function __construct($storageKey = '_sf2_meta', $updateThreshold = 0) Chris@0: { Chris@0: $this->storageKey = $storageKey; Chris@0: $this->updateThreshold = $updateThreshold; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function initialize(array &$array) Chris@0: { Chris@0: $this->meta = &$array; Chris@0: Chris@0: if (isset($array[self::CREATED])) { Chris@0: $this->lastUsed = $this->meta[self::UPDATED]; Chris@0: Chris@0: $timeStamp = time(); Chris@0: if ($timeStamp - $array[self::UPDATED] >= $this->updateThreshold) { Chris@0: $this->meta[self::UPDATED] = $timeStamp; Chris@0: } Chris@0: } else { Chris@0: $this->stampCreated(); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the lifetime that the session cookie was set with. Chris@0: * Chris@0: * @return int Chris@0: */ Chris@0: public function getLifetime() Chris@0: { Chris@0: return $this->meta[self::LIFETIME]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Stamps a new session's metadata. Chris@0: * Chris@0: * @param int $lifetime Sets the cookie lifetime for the session cookie. A null value Chris@0: * will leave the system settings unchanged, 0 sets the cookie Chris@0: * to expire with browser session. Time is in seconds, and is Chris@0: * not a Unix timestamp. Chris@0: */ Chris@0: public function stampNew($lifetime = null) Chris@0: { Chris@0: $this->stampCreated($lifetime); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getStorageKey() Chris@0: { Chris@0: return $this->storageKey; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the created timestamp metadata. Chris@0: * Chris@0: * @return int Unix timestamp Chris@0: */ Chris@0: public function getCreated() Chris@0: { Chris@0: return $this->meta[self::CREATED]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the last used metadata. Chris@0: * Chris@0: * @return int Unix timestamp Chris@0: */ Chris@0: public function getLastUsed() Chris@0: { Chris@0: return $this->lastUsed; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function clear() Chris@0: { Chris@0: // nothing to do Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getName() Chris@0: { Chris@0: return $this->name; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets name. Chris@0: * Chris@0: * @param string $name Chris@0: */ Chris@0: public function setName($name) Chris@0: { Chris@0: $this->name = $name; Chris@0: } Chris@0: Chris@0: private function stampCreated($lifetime = null) Chris@0: { Chris@0: $timeStamp = time(); Chris@0: $this->meta[self::CREATED] = $this->meta[self::UPDATED] = $this->lastUsed = $timeStamp; Chris@0: $this->meta[self::LIFETIME] = (null === $lifetime) ? ini_get('session.cookie_lifetime') : $lifetime; Chris@0: } Chris@0: }