<?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\HttpKernel\EventListener; 
 
use Symfony\Component\HttpFoundation\Session\SessionInterface; 
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage; 
use Symfony\Component\HttpKernel\Event\RequestEvent; 
 
/** 
 * Sets the session in the request. 
 * 
 * When the passed container contains a "session_storage" entry which 
 * holds a NativeSessionStorage instance, the "cookie_secure" option 
 * will be set to true whenever the current main request is secure. 
 * 
 * @author Fabien Potencier <fabien@symfony.com> 
 * 
 * @final 
 */ 
class SessionListener extends AbstractSessionListener 
{ 
    public function onKernelRequest(RequestEvent $event) 
    { 
        parent::onKernelRequest($event); 
 
        if (!$event->isMainRequest() || (!$this->container->has('session') && !$this->container->has('session_factory'))) { 
            return; 
        } 
 
        if ($this->container->has('session_storage') 
            && ($storage = $this->container->get('session_storage')) instanceof NativeSessionStorage 
            && ($mainRequest = $this->container->get('request_stack')->getMainRequest()) 
            && $mainRequest->isSecure() 
        ) { 
            $storage->setOptions(['cookie_secure' => true]); 
        } 
    } 
 
    protected function getSession(): ?SessionInterface 
    { 
        if ($this->container->has('session')) { 
            return $this->container->get('session'); 
        } 
 
        if ($this->container->has('session_factory')) { 
            return $this->container->get('session_factory')->createSession(); 
        } 
 
        return null; 
    } 
}