Chris@14: Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace Symfony\Component\HttpFoundation\Session\Storage\Handler; Chris@14: Chris@14: /** Chris@14: * Adds basic `SessionUpdateTimestampHandlerInterface` behaviors to another `SessionHandlerInterface`. Chris@14: * Chris@14: * @author Nicolas Grekas Chris@14: */ Chris@14: class StrictSessionHandler extends AbstractSessionHandler Chris@14: { Chris@14: private $handler; Chris@14: private $doDestroy; Chris@14: Chris@14: public function __construct(\SessionHandlerInterface $handler) Chris@14: { Chris@14: if ($handler instanceof \SessionUpdateTimestampHandlerInterface) { Chris@17: throw new \LogicException(sprintf('"%s" is already an instance of "SessionUpdateTimestampHandlerInterface", you cannot wrap it with "%s".', \get_class($handler), self::class)); Chris@14: } Chris@14: Chris@14: $this->handler = $handler; Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: public function open($savePath, $sessionName) Chris@14: { Chris@14: parent::open($savePath, $sessionName); Chris@14: Chris@14: return $this->handler->open($savePath, $sessionName); Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: protected function doRead($sessionId) Chris@14: { Chris@14: return $this->handler->read($sessionId); Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: public function updateTimestamp($sessionId, $data) Chris@14: { Chris@14: return $this->write($sessionId, $data); Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: protected function doWrite($sessionId, $data) Chris@14: { Chris@14: return $this->handler->write($sessionId, $data); Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: public function destroy($sessionId) Chris@14: { Chris@14: $this->doDestroy = true; Chris@14: $destroyed = parent::destroy($sessionId); Chris@14: Chris@14: return $this->doDestroy ? $this->doDestroy($sessionId) : $destroyed; Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: protected function doDestroy($sessionId) Chris@14: { Chris@14: $this->doDestroy = false; Chris@14: Chris@14: return $this->handler->destroy($sessionId); Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: public function close() Chris@14: { Chris@14: return $this->handler->close(); Chris@14: } Chris@14: Chris@14: /** Chris@14: * {@inheritdoc} Chris@14: */ Chris@14: public function gc($maxlifetime) Chris@14: { Chris@14: return $this->handler->gc($maxlifetime); Chris@14: } Chris@14: }