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
|
||||
* Added `handler_id` configuration under `session` key to represent `session.handler`
|
||||
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
|
||||
|
||||
|
@ -175,6 +175,9 @@ class Configuration implements ConfigurationInterface
|
||||
->scalarNode('cookie_domain')->end()
|
||||
->booleanNode('cookie_secure')->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('path')->setInfo('DEPRECATED! Please use: cookie_path')->end()
|
||||
->scalarNode('domain')->setInfo('DEPRECATED! Please use: cookie_domain')->end()
|
||||
|
@ -295,7 +295,7 @@ class FrameworkExtension extends Extension
|
||||
// session storage
|
||||
$container->setAlias('session.storage', $config['storage_id']);
|
||||
$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])) {
|
||||
$options[$key] = $config[$key];
|
||||
}
|
||||
|
@ -76,13 +76,13 @@
|
||||
<xsd:attribute name="storage-id" type="xsd:string" />
|
||||
<xsd:attribute name="handler-id" 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-domain" type="xsd:string" />
|
||||
<xsd:attribute name="cookie-secure" type="xsd:boolean" />
|
||||
<xsd:attribute name="cookie-httponly" type="xsd:boolean" />
|
||||
<!-- 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="domain" type="xsd:string" />
|
||||
<xsd:attribute name="secure" type="xsd:boolean" />
|
||||
@ -90,6 +90,9 @@
|
||||
<!-- end of deprecated attributes -->
|
||||
<xsd:attribute name="cache-limiter" type="xsd:string" />
|
||||
<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 name="templating">
|
||||
|
@ -28,6 +28,9 @@ $container->loadFromExtension('framework', array(
|
||||
'domain' => 'example.com',
|
||||
'secure' => true,
|
||||
'httponly' => true,
|
||||
'gc_maxlifetime' => 90000,
|
||||
'gc_divisor' => 108,
|
||||
'gc_probability' => 1,
|
||||
),
|
||||
'templating' => array(
|
||||
'assets_version' => 'SomeVersionScheme',
|
||||
|
@ -12,7 +12,7 @@
|
||||
<framework:esi enabled="true" />
|
||||
<framework:profiler only-exceptions="true" />
|
||||
<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:loader>loader.foo</framework:loader>
|
||||
<framework:loader>loader.bar</framework:loader>
|
||||
|
@ -22,6 +22,9 @@ framework:
|
||||
domain: example.com
|
||||
secure: true
|
||||
httponly: true
|
||||
gc_probability: 1
|
||||
gc_divisor: 108
|
||||
gc_maxlifetime: 90000
|
||||
templating:
|
||||
assets_version: SomeVersionScheme
|
||||
assets_base_urls: http://cdn.example.com
|
||||
|
@ -88,6 +88,9 @@ abstract class FrameworkExtensionTest extends TestCase
|
||||
$this->assertEquals('example.com', $options['cookie_domain']);
|
||||
$this->assertTrue($options['cookie_secure']);
|
||||
$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()
|
||||
|
Reference in New Issue
Block a user