Вход Регистрация
Файл: onlinepoisk.wm-scripts.ru/vendor/silex/silex/silex/src/Silex/Provider/SessionServiceProvider.php
Строк: 213
<?php

/*
 * This file is part of the Silex framework.
 *
 * (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 SilexProvider;

use 
SilexApplication;
use 
SilexServiceProviderInterface;

use 
SymfonyComponentHttpFoundationSessionStorageHandlerNativeFileSessionHandler;
use 
SymfonyComponentHttpFoundationSessionStorageNativeSessionStorage;
use 
SymfonyComponentHttpFoundationSessionStorageMockFileSessionStorage;
use 
SymfonyComponentHttpFoundationSessionSession;
use 
SymfonyComponentHttpFoundationCookie;
use 
SymfonyComponentHttpKernelHttpKernelInterface;
use 
SymfonyComponentHttpKernelKernelEvents;
use 
SymfonyComponentHttpKernelEventFilterResponseEvent;
use 
SymfonyComponentHttpKernelEventGetResponseEvent;

/**
 * Symfony HttpFoundation component Provider for sessions.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class SessionServiceProvider implements ServiceProviderInterface
{
    private 
$app;

    public function 
register(Application $app)
    {
        
$this->app $app;

        
$app['session.test'] = false;

        
$app['session'] = $app->share(function ($app) {
            if (!isset(
$app['session.storage'])) {
                if (
$app['session.test']) {
                    
$app['session.storage'] = $app['session.storage.test'];
                } else {
                    
$app['session.storage'] = $app['session.storage.native'];
                }
            }

            return new 
Session($app['session.storage']);
        });

        
$app['session.storage.handler'] = $app->share(function ($app) {
            return new 
NativeFileSessionHandler($app['session.storage.save_path']);
        });

        
$app['session.storage.native'] = $app->share(function ($app) {
            return new 
NativeSessionStorage(
                
$app['session.storage.options'],
                
$app['session.storage.handler']
            );
        });

        
$app['session.storage.test'] = $app->share(function() {
            return new 
MockFileSessionStorage();
        });

        
$app['session.storage.options'] = array();
        
$app['session.default_locale'] = 'en';
        
$app['session.storage.save_path'] = null;
    }

    public function 
onEarlyKernelRequest(GetResponseEvent $event)
    {
        
$event->getRequest()->setSession($this->app['session']);
    }

    public function 
onKernelRequest(GetResponseEvent $event)
    {
        if (
HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
            return;
        }

        
// bootstrap the session
        
if (!isset($this->app['session'])) {
            return;
        }

        
$session $this->app['session'];
        
$cookies $event->getRequest()->cookies;

        if (
$cookies->has($session->getName())) {
            
$session->setId($cookies->get($session->getName()));
        } else {
            
$session->migrate(false);
        }
    }

    public function 
onKernelResponse(FilterResponseEvent $event)
    {
        if (
HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
            return;
        }

        
$session $event->getRequest()->getSession();
        if (
$session && $session->isStarted()) {
            
$session->save();

            
$params session_get_cookie_params();

            
$event->getResponse()->headers->setCookie(new Cookie($session->getName(), $session->getId(), === $params['lifetime'] ? time() + $params['lifetime'], $params['path'], $params['domain'], $params['secure'], $params['httponly']));
        }
    }

    public function 
boot(Application $app)
    {
        
$app['dispatcher']->addListener(KernelEvents::REQUEST, array($this'onEarlyKernelRequest'), 128);

        if (
$app['session.test']) {
            
$app['dispatcher']->addListener(KernelEvents::REQUEST, array($this'onKernelRequest'), 192);
            
$app['dispatcher']->addListener(KernelEvents::RESPONSE, array($this'onKernelResponse'), -128);
        }
    }
}
Онлайн: 2
Реклама