| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;/** * Migrating session handler for migrating from one handler to another. It reads * from the current handler and writes both the current and new ones. * * It ignores errors from the new handler. * * @author Ross Motley <ross.motley@amara.com> * @author Oliver Radwell <oliver.radwell@amara.com> */class MigratingSessionHandler implements \SessionHandlerInterface, \SessionUpdateTimestampHandlerInterface{    /**     * @var \SessionHandlerInterface&\SessionUpdateTimestampHandlerInterface     */    private $currentHandler;    /**     * @var \SessionHandlerInterface&\SessionUpdateTimestampHandlerInterface     */    private $writeOnlyHandler;    public function __construct(\SessionHandlerInterface $currentHandler, \SessionHandlerInterface $writeOnlyHandler)    {        if (!$currentHandler instanceof \SessionUpdateTimestampHandlerInterface) {            $currentHandler = new StrictSessionHandler($currentHandler);        }        if (!$writeOnlyHandler instanceof \SessionUpdateTimestampHandlerInterface) {            $writeOnlyHandler = new StrictSessionHandler($writeOnlyHandler);        }        $this->currentHandler = $currentHandler;        $this->writeOnlyHandler = $writeOnlyHandler;    }    /**     * @return bool     */    #[\ReturnTypeWillChange]    public function close()    {        $result = $this->currentHandler->close();        $this->writeOnlyHandler->close();        return $result;    }    /**     * @return bool     */    #[\ReturnTypeWillChange]    public function destroy($sessionId)    {        $result = $this->currentHandler->destroy($sessionId);        $this->writeOnlyHandler->destroy($sessionId);        return $result;    }    /**     * @return int|false     */    #[\ReturnTypeWillChange]    public function gc($maxlifetime)    {        $result = $this->currentHandler->gc($maxlifetime);        $this->writeOnlyHandler->gc($maxlifetime);        return $result;    }    /**     * @return bool     */    #[\ReturnTypeWillChange]    public function open($savePath, $sessionName)    {        $result = $this->currentHandler->open($savePath, $sessionName);        $this->writeOnlyHandler->open($savePath, $sessionName);        return $result;    }    /**     * @return string     */    #[\ReturnTypeWillChange]    public function read($sessionId)    {        // No reading from new handler until switch-over        return $this->currentHandler->read($sessionId);    }    /**     * @return bool     */    #[\ReturnTypeWillChange]    public function write($sessionId, $sessionData)    {        $result = $this->currentHandler->write($sessionId, $sessionData);        $this->writeOnlyHandler->write($sessionId, $sessionData);        return $result;    }    /**     * @return bool     */    #[\ReturnTypeWillChange]    public function validateId($sessionId)    {        // No reading from new handler until switch-over        return $this->currentHandler->validateId($sessionId);    }    /**     * @return bool     */    #[\ReturnTypeWillChange]    public function updateTimestamp($sessionId, $sessionData)    {        $result = $this->currentHandler->updateTimestamp($sessionId, $sessionData);        $this->writeOnlyHandler->updateTimestamp($sessionId, $sessionData);        return $result;    }}
 |