merged branch drak/session_gc (PR #3659)
Commits -------cdba4cf
[FrameworkBundle] Change XSD to allow string replacements on session args.52f7955
[FrameworkBundle] Remove default from gc_* session configuration keys.749593d
[FrameworkBundle] Allow configuration of session garbage collection for session 'keep-alive'. Discussion ---------- [2.1][FrameworkBundle] Allow configuration of session garbage collection Bug fix: no Feature addition: yes Backwards compatibility break: no Symfony2 tests pass: yes Fixes the following tickets: #2171 Todo: - --------------------------------------------------------------------------- by drak at 2012-03-21T21:56:20Z @fabpot - this PR is ready for merge. It basically allows configuration of some session ini values that are necessary in controlling the session behaviour. --------------------------------------------------------------------------- by dlsniper at 2012-03-21T22:57:18Z @drak shouldn't all the options here: https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php#L266 be available for configuration, or am I just reading the source wrong and they already are? In this case should I make a separate PR to cover the rest or could you do it in this one? --------------------------------------------------------------------------- by fabpot at 2012-03-23T14:56:22Z @drak: the discussion is the ticket is very interesting and I think it should be part of a cookbook in the documentation. Can you take care of that before I merge this PR? Thanks. --------------------------------------------------------------------------- by drak at 2012-03-25T15:32:59Z @fabpot - yes - it's on the todo list. Will update this PR when done. --------------------------------------------------------------------------- by drak at 2012-03-26T19:45:13Z @fabpot - this is ready for merging, the documentation is done (the PR is in but I'll tweak it, but no need to wait to merge this PR). I will also add something extra to cookbook (I wrote docs for the component).
This commit is contained in:
commit
1bb6e0de4d
@ -52,6 +52,12 @@ To get the diff between two versions, go to https://github.com/symfony/symfony/c
|
|||||||
'httponly' are now prefixed with cookie_ when dumped to the container
|
'httponly' are now prefixed with cookie_ when dumped to the container
|
||||||
* Added `handler_id` configuration under `session` key to represent `session.handler`
|
* Added `handler_id` configuration under `session` key to represent `session.handler`
|
||||||
service, defaults to `session.handler.native_file`.
|
service, defaults to `session.handler.native_file`.
|
||||||
|
* Added `gc_maxlifetime`, `gc_probability`, and `gc_divisor` to session
|
||||||
|
configuration.This means session garbage collection has a
|
||||||
|
`gc_probability`/`gc_divisor` chance of being run. The `gc_maxlifetime` means
|
||||||
|
how long a session can idle for which is separate from cookie lifetime which
|
||||||
|
defines how long a cookie can be store on the remote client.
|
||||||
|
|
||||||
|
|
||||||
### MonologBundle
|
### MonologBundle
|
||||||
|
|
||||||
|
@ -175,6 +175,9 @@ class Configuration implements ConfigurationInterface
|
|||||||
->scalarNode('cookie_domain')->end()
|
->scalarNode('cookie_domain')->end()
|
||||||
->booleanNode('cookie_secure')->end()
|
->booleanNode('cookie_secure')->end()
|
||||||
->booleanNode('cookie_httponly')->end()
|
->booleanNode('cookie_httponly')->end()
|
||||||
|
->scalarNode('gc_divisor')->end()
|
||||||
|
->scalarNode('gc_probability')->end()
|
||||||
|
->scalarNode('gc_maxlifetime')->end()
|
||||||
->scalarNode('lifetime')->setInfo('DEPRECATED! Please use: cookie_lifetime')->end()
|
->scalarNode('lifetime')->setInfo('DEPRECATED! Please use: cookie_lifetime')->end()
|
||||||
->scalarNode('path')->setInfo('DEPRECATED! Please use: cookie_path')->end()
|
->scalarNode('path')->setInfo('DEPRECATED! Please use: cookie_path')->end()
|
||||||
->scalarNode('domain')->setInfo('DEPRECATED! Please use: cookie_domain')->end()
|
->scalarNode('domain')->setInfo('DEPRECATED! Please use: cookie_domain')->end()
|
||||||
|
@ -295,7 +295,7 @@ class FrameworkExtension extends Extension
|
|||||||
// session storage
|
// session storage
|
||||||
$container->setAlias('session.storage', $config['storage_id']);
|
$container->setAlias('session.storage', $config['storage_id']);
|
||||||
$options = array();
|
$options = array();
|
||||||
foreach (array('name', 'cookie_lifetime', 'cookie_path', 'cookie_domain', 'cookie_secure', 'cookie_httponly', 'auto_start') as $key) {
|
foreach (array('name', 'cookie_lifetime', 'cookie_path', 'cookie_domain', 'cookie_secure', 'cookie_httponly', 'auto_start', 'gc_maxlifetime', 'gc_probability', 'gc_divisor') as $key) {
|
||||||
if (isset($config[$key])) {
|
if (isset($config[$key])) {
|
||||||
$options[$key] = $config[$key];
|
$options[$key] = $config[$key];
|
||||||
}
|
}
|
||||||
|
@ -76,13 +76,13 @@
|
|||||||
<xsd:attribute name="storage-id" type="xsd:string" />
|
<xsd:attribute name="storage-id" type="xsd:string" />
|
||||||
<xsd:attribute name="handler-id" type="xsd:string" />
|
<xsd:attribute name="handler-id" type="xsd:string" />
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
<xsd:attribute name="cookie-lifetime" type="xsd:integer" />
|
<xsd:attribute name="cookie-lifetime" type="xsd:string" />
|
||||||
<xsd:attribute name="cookie-path" type="xsd:string" />
|
<xsd:attribute name="cookie-path" type="xsd:string" />
|
||||||
<xsd:attribute name="cookie-domain" type="xsd:string" />
|
<xsd:attribute name="cookie-domain" type="xsd:string" />
|
||||||
<xsd:attribute name="cookie-secure" type="xsd:boolean" />
|
<xsd:attribute name="cookie-secure" type="xsd:boolean" />
|
||||||
<xsd:attribute name="cookie-httponly" type="xsd:boolean" />
|
<xsd:attribute name="cookie-httponly" type="xsd:boolean" />
|
||||||
<!-- deprecated attributes -->
|
<!-- deprecated attributes -->
|
||||||
<xsd:attribute name="lifetime" type="xsd:integer" />
|
<xsd:attribute name="lifetime" type="xsd:string" />
|
||||||
<xsd:attribute name="path" type="xsd:string" />
|
<xsd:attribute name="path" type="xsd:string" />
|
||||||
<xsd:attribute name="domain" type="xsd:string" />
|
<xsd:attribute name="domain" type="xsd:string" />
|
||||||
<xsd:attribute name="secure" type="xsd:boolean" />
|
<xsd:attribute name="secure" type="xsd:boolean" />
|
||||||
@ -90,6 +90,9 @@
|
|||||||
<!-- end of deprecated attributes -->
|
<!-- end of deprecated attributes -->
|
||||||
<xsd:attribute name="cache-limiter" type="xsd:string" />
|
<xsd:attribute name="cache-limiter" type="xsd:string" />
|
||||||
<xsd:attribute name="auto-start" type="xsd:boolean" />
|
<xsd:attribute name="auto-start" type="xsd:boolean" />
|
||||||
|
<xsd:attribute name="gc-maxlifetime" type="xsd:string" />
|
||||||
|
<xsd:attribute name="gc-divisor" type="xsd:string" />
|
||||||
|
<xsd:attribute name="gc-probability" type="xsd:string" />
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
|
|
||||||
<xsd:complexType name="templating">
|
<xsd:complexType name="templating">
|
||||||
|
@ -28,6 +28,9 @@ $container->loadFromExtension('framework', array(
|
|||||||
'domain' => 'example.com',
|
'domain' => 'example.com',
|
||||||
'secure' => true,
|
'secure' => true,
|
||||||
'httponly' => true,
|
'httponly' => true,
|
||||||
|
'gc_maxlifetime' => 90000,
|
||||||
|
'gc_divisor' => 108,
|
||||||
|
'gc_probability' => 1,
|
||||||
),
|
),
|
||||||
'templating' => array(
|
'templating' => array(
|
||||||
'assets_version' => 'SomeVersionScheme',
|
'assets_version' => 'SomeVersionScheme',
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
<framework:esi enabled="true" />
|
<framework:esi enabled="true" />
|
||||||
<framework:profiler only-exceptions="true" />
|
<framework:profiler only-exceptions="true" />
|
||||||
<framework:router resource="%kernel.root_dir%/config/routing.xml" type="xml" />
|
<framework:router resource="%kernel.root_dir%/config/routing.xml" type="xml" />
|
||||||
<framework:session auto-start="true" storage-id="session.storage.native" handler-id="session.handler.native_file" name="_SYMFONY" cookie-lifetime="86400" cookie-path="/" cookie-domain="example.com" cookie-secure="true" cookie-httponly="true" />
|
<framework:session auto-start="true" gc-maxlifetime="90000" gc-probability="1" gc-divisor="108" storage-id="session.storage.native" handler-id="session.handler.native_file" name="_SYMFONY" cookie-lifetime="86400" cookie-path="/" cookie-domain="example.com" cookie-secure="true" cookie-httponly="true" />
|
||||||
<framework:templating assets-version="SomeVersionScheme" cache="/path/to/cache" >
|
<framework:templating assets-version="SomeVersionScheme" cache="/path/to/cache" >
|
||||||
<framework:loader>loader.foo</framework:loader>
|
<framework:loader>loader.foo</framework:loader>
|
||||||
<framework:loader>loader.bar</framework:loader>
|
<framework:loader>loader.bar</framework:loader>
|
||||||
|
@ -22,6 +22,9 @@ framework:
|
|||||||
domain: example.com
|
domain: example.com
|
||||||
secure: true
|
secure: true
|
||||||
httponly: true
|
httponly: true
|
||||||
|
gc_probability: 1
|
||||||
|
gc_divisor: 108
|
||||||
|
gc_maxlifetime: 90000
|
||||||
templating:
|
templating:
|
||||||
assets_version: SomeVersionScheme
|
assets_version: SomeVersionScheme
|
||||||
assets_base_urls: http://cdn.example.com
|
assets_base_urls: http://cdn.example.com
|
||||||
|
@ -88,6 +88,9 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
$this->assertEquals('example.com', $options['cookie_domain']);
|
$this->assertEquals('example.com', $options['cookie_domain']);
|
||||||
$this->assertTrue($options['cookie_secure']);
|
$this->assertTrue($options['cookie_secure']);
|
||||||
$this->assertTrue($options['cookie_httponly']);
|
$this->assertTrue($options['cookie_httponly']);
|
||||||
|
$this->assertEquals(108, $options['gc_divisor']);
|
||||||
|
$this->assertEquals(1, $options['gc_probability']);
|
||||||
|
$this->assertEquals(90000, $options['gc_maxlifetime']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSessionDeprecatedMergeFull()
|
public function testSessionDeprecatedMergeFull()
|
||||||
|
Reference in New Issue
Block a user