Файл: 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(), 0 === $params['lifetime'] ? 0 : 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);
}
}
}