Skip to content

Commit

Permalink
refactored session configuration
Browse files Browse the repository at this point in the history
The configuration names have been changed to avoid confusion (user was
ambiguous)

    Before:
          <app:user default_locale="fr">
              <app:session name="SYMFONY" type="Native" lifetime="3600" />
          </app:user>

    After:
          <app:session default_locale="fr" name="SYMFONY" storage_id="native" lifetime="3600" />
  • Loading branch information
fabpot committed Nov 10, 2010
1 parent 6f034d2 commit 51a3d0b
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 57 deletions.
Expand Up @@ -111,8 +111,8 @@ public function configLoad($config, ContainerBuilder $container)
$this->registerTestConfiguration($config, $container);
}

if (isset($config['user'])) {
$this->registerUserConfiguration($config, $container);
if (isset($config['session'])) {
$this->registerSessionConfiguration($config, $container);
}

$this->registerTranslatorConfiguration($config, $container);
Expand Down Expand Up @@ -303,9 +303,9 @@ protected function registerTranslatorConfiguration($config, ContainerBuilder $co
* @param array $config A configuration array
* @param ContainerBuilder $container A ContainerBuilder instance
*/
protected function registerUserConfiguration($config, ContainerBuilder $container)
protected function registerSessionConfiguration($config, ContainerBuilder $container)
{
$config = $config['user'];
$config = $config['session'];

if (!$container->hasDefinition('session')) {
$loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
Expand All @@ -322,20 +322,19 @@ protected function registerUserConfiguration($config, ContainerBuilder $containe
$container->setParameter('session.class', $config['class']);
}

foreach (array('name', 'lifetime', 'path', 'domain', 'secure', 'httponly', 'cache_limiter', 'cache-limiter', 'pdo.db_table') as $name) {
if (isset($config['session'][$name])) {
$container->setParameter('session.options.'.$name, $config['session'][$name]);
}
if (isset($config['storage_id'])) {
$container->setAlias('session.storage', 'session.storage.'.$config['storage_id']);
} else {
$config['storage_id'] = 'native';
}

if (isset($config['session']['class'])) {
$class = $config['session']['class'];
if (in_array($class, array('Native', 'Pdo'))) {
$class = 'Symfony\\Component\\HttpFoundation\\SessionStorage\\'.$class.'SessionStorage';
$options = $container->getParameter('session.storage.'.strtolower($config['storage_id']).'.options');
foreach (array('name', 'lifetime', 'path', 'domain', 'secure', 'httponly', 'cache_limiter', 'cache-limiter', 'pdo.db_table') as $name) {
if (isset($config['session'][$name])) {

This comment has been minimized.

Copy link
@tecbot

tecbot Nov 12, 2010

if (isset($config['session'][$name])) => if (isset($config[$name]))
and
$options[$name] = $config['session'][$name]; => $options[$name] = $config[$name];
see line 308

This comment has been minimized.

Copy link
@fabpot

fabpot Nov 12, 2010

Author Member

fixed

$options[$name] = $config['session'][$name];
}

$container->setParameter('session.session', 'session.session.'.strtolower($class));
}
$container->setParameter('session.storage.'.strtolower($config['storage_id']).'.options', $options);

This comment has been minimized.

Copy link
@tecbot

tecbot Nov 12, 2010

Default settings are not overwritten in the NativeSessionStorage class, because the parameters have prefixes. e.g. session_cookie_lifetime or session_cookie_path

This comment has been minimized.

Copy link
@fabpot

fabpot Nov 12, 2010

Author Member

fixed.

}

protected function registerRouterConfiguration($config, ContainerBuilder $container)
Expand Down
Expand Up @@ -12,7 +12,7 @@
<xsd:element name="router" type="router" minOccurs="0" maxOccurs="1" />
<xsd:element name="validation" type="validation" minOccurs="0" maxOccurs="1" />
<xsd:element name="profiler" type="profiler" minOccurs="0" maxOccurs="1" />
<xsd:element name="user" type="user" minOccurs="0" maxOccurs="1" />
<xsd:element name="session" type="session" minOccurs="0" maxOccurs="1" />
<xsd:element name="templating" type="templating" minOccurs="0" maxOccurs="1" />
<xsd:element name="translator" type="translator" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
Expand Down Expand Up @@ -44,25 +44,17 @@
<xsd:attribute name="annotations" type="xsd:boolean" />
</xsd:complexType>

<xsd:complexType name="user">
<xsd:sequence>
<xsd:element name="session" type="session" minOccurs="0" maxOccurs="1" />
</xsd:sequence>

<xsd:attribute name="class" type="xsd:string" />
<xsd:attribute name="default_locale" type="xsd:string" />
</xsd:complexType>

<xsd:complexType name="session">
<xsd:attribute name="class" type="xsd:string" />
<xsd:attribute name="storage_id" type="xsd:string" />
<xsd:attribute name="default_locale" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="lifetime" type="xsd:integer" />
<xsd:attribute name="path" type="xsd:string" />
<xsd:attribute name="domain" type="xsd:string" />
<xsd:attribute name="secure" type="xsd:string" />
<xsd:attribute name="httponly" type="xsd:string" />
<xsd:attribute name="cache_limiter" type="xsd:string" />
<xsd:attribute name="cache-limiter" type="xsd:string" />
<xsd:attribute name="pdo.db_table" type="xsd:string" />
</xsd:complexType>

Expand Down
35 changes: 6 additions & 29 deletions src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml
Expand Up @@ -7,16 +7,10 @@
<parameters>
<parameter key="session.class">Symfony\Component\HttpFoundation\Session</parameter>
<parameter key="session.default_locale">en</parameter>
<parameter key="session.storage.class">Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage</parameter>
<parameter key="session.storage.native.class">Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage</parameter>
<parameter key="session.storage.native.options" type="collection" />
<parameter key="session.storage.pdo.class">Symfony\Component\HttpFoundation\SessionStorage\PdoSessionStorage</parameter>
<parameter key="session.options.name">SYMFONY_SESSION</parameter>
<parameter key="session.options.lifetime">false</parameter>
<parameter key="session.options.path">/</parameter>
<parameter key="session.options.domain" />
<parameter key="session.options.secure">false</parameter>
<parameter key="session.options.httponly">false</parameter>
<parameter key="session.options.cache_limiter">none</parameter>
<parameter key="session.options.pdo.db_table">session</parameter>
<parameter key="session.storage.pdo.options" type="collection" />
</parameters>

<services>
Expand All @@ -27,30 +21,13 @@
</argument>
</service>

<service id="session.storage.native" class="%session.storage.class%">
<argument type="collection">
<argument key="session_name">%session.options.name%</argument>
<argument key="session_cookie_lifetime">%session.options.lifetime%</argument>
<argument key="session_cookie_path">%session.options.path%</argument>
<argument key="session_cookie_domain">%session.options.domain%</argument>
<argument key="session_cookie_secure">%session.options.secure%</argument>
<argument key="session_cookie_httponly">%session.options.httponly%</argument>
<argument key="session_cache_limiter">%session.options.cache_limiter%</argument>
</argument>
<service id="session.storage.native" class="%session.storage.native.class%">
<argument>%session.storage.native.options%</argument>
</service>

<service id="session.storage.pdo" class="%session.storage.pdo.class%">
<argument type="service" id="pdo_connection" />
<argument type="collection">
<argument key="session_name">%session.options.name%</argument>
<argument key="session_cookie_lifetime">%session.options.lifetime%</argument>
<argument key="session_cookie_path">%session.options.path%</argument>
<argument key="session_cookie_domain">%session.options.domain%</argument>
<argument key="session_cookie_secure">%session.options.secure%</argument>
<argument key="session_cookie_httponly">%session.options.httponly%</argument>
<argument key="session_cache_limiter">%session.options.cache_limiter%</argument>
<argument key="db_table">%session.options.pdo.db_table%</argument>
</argument>
<argument>%session.storage.pdo.options%</argument>
</service>

<service id="session.storage" alias="session.storage.native" />
Expand Down
Expand Up @@ -26,7 +26,7 @@ class NativeSessionStorage implements SessionStorageInterface
/**
* Available options:
*
* * session_name: The cookie name (symfony by default)
* * session_name: The cookie name (_SESSION by default)
* * session_id: The session id (null by default)
* * session_cookie_lifetime: Cookie lifetime
* * session_cookie_path: Cookie path
Expand All @@ -44,7 +44,7 @@ public function __construct(array $options = array())
$cookieDefaults = session_get_cookie_params();

$this->options = array_merge(array(
'session_name' => 'SYMFONY_SESSION',
'session_name' => '_SESSION',
'session_cookie_lifetime' => $cookieDefaults['lifetime'],
'session_cookie_path' => $cookieDefaults['path'],
'session_cookie_domain' => $cookieDefaults['domain'],
Expand Down

0 comments on commit 51a3d0b

Please sign in to comment.