Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 519eb1c

Browse filesBrowse files
committed
Do not pass the value to the NativeSessionStorage constructor if its value is auto. In addition, resolve this auto value immediately when the SessionListener event is called.
1 parent 9765b5a commit 519eb1c
Copy full SHA for 519eb1c

File tree

4 files changed

+25
-6
lines changed
Filter options

4 files changed

+25
-6
lines changed

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,15 +935,19 @@ private function registerSessionConfiguration(array $config, ContainerBuilder $c
935935
}
936936
}
937937

938+
$nativeStorageDefaultOptions = $options;
939+
938940
if ('auto' === ($options['cookie_secure'] ?? null)) {
939941
$locator = $container->getDefinition('session_listener')->getArgument(0);
940942
$locator->setValues($locator->getValues() + [
941943
'session_storage' => new Reference('session.storage', ContainerInterface::IGNORE_ON_INVALID_REFERENCE),
942944
'request_stack' => new Reference('request_stack'),
943945
]);
946+
unset($nativeStorageDefaultOptions['cookie_secure']);
944947
}
945948

946949
$container->setParameter('session.storage.options', $options);
950+
$container->setParameter('session.storage.native.default_options', $nativeStorageDefaultOptions);
947951

948952
// session handler (the internal callback registered with PHP session management)
949953
if (null === $config['handler_id']) {

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
</service>
2626

2727
<service id="session.storage.native" class="Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage">
28-
<argument>%session.storage.options%</argument>
28+
<argument>%session.storage.native.default_options%</argument>
2929
<argument type="service" id="session.handler" />
3030
<argument type="service" id="session.storage.metadata_bag" />
3131
</service>

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,6 +1537,12 @@ public function testSessionCookieSecureAuto()
15371537
{
15381538
$container = $this->createContainerFromFile('session_cookie_secure_auto');
15391539

1540+
$options = $container->getParameter('session.storage.options');
1541+
$this->assertEquals('auto', $options['cookie_secure']);
1542+
1543+
$options = $container->getParameter('session.storage.native.default_options');
1544+
$this->assertNotContains('cookie_secure', $options, 'Should not pass "cookie_secure" to NativeSessionStorage constructor if its value is "auto"');
1545+
15401546
$expected = ['session', 'initialized_session', 'session_storage', 'request_stack'];
15411547
$this->assertEquals($expected, array_keys($container->getDefinition('session_listener')->getArgument(0)->getValues()));
15421548
}

‎src/Symfony/Component/HttpKernel/EventListener/SessionListener.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/EventListener/SessionListener.php
+14-5Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Psr\Container\ContainerInterface;
1515
use Symfony\Component\HttpFoundation\Session\SessionInterface;
1616
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
17+
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
1718

1819
/**
1920
* Sets the session in the request.
@@ -33,18 +34,26 @@ public function __construct(ContainerInterface $container)
3334
$this->container = $container;
3435
}
3536

36-
protected function getSession(): ?SessionInterface
37+
public function onKernelRequest(GetResponseEvent $event)
3738
{
38-
if (!$this->container->has('session')) {
39-
return null;
39+
parent::onKernelRequest($event);
40+
41+
if (!$event->isMasterRequest() || !$this->container->has('session')) {
42+
return;
4043
}
4144

4245
if ($this->container->has('session_storage')
4346
&& ($storage = $this->container->get('session_storage')) instanceof NativeSessionStorage
4447
&& ($masterRequest = $this->container->get('request_stack')->getMasterRequest())
45-
&& $masterRequest->isSecure()
4648
) {
47-
$storage->setOptions(['cookie_secure' => true]);
49+
$storage->setOptions(['cookie_secure' => $masterRequest->isSecure()]);
50+
}
51+
}
52+
53+
protected function getSession(): ?SessionInterface
54+
{
55+
if (!$this->container->has('session')) {
56+
return null;
4857
}
4958

5059
return $this->container->get('session');

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.