diff --git a/src/Symfony/Component/Security/Http/Firewall/ContextListener.php b/src/Symfony/Component/Security/Http/Firewall/ContextListener.php index 9243119acb1c..1201e161736b 100644 --- a/src/Symfony/Component/Security/Http/Firewall/ContextListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/ContextListener.php @@ -115,10 +115,10 @@ public function authenticate(RequestEvent $event) if (null !== $session) { $usageIndexValue = method_exists(Request::class, 'getPreferredFormat') && $session instanceof Session ? $usageIndexReference = &$session->getUsageIndex() : 0; - $sessionId = $session->getId(); + $sessionId = $request->cookies->get($session->getName()); $token = $session->get($this->sessionKey); - if ($this->sessionTrackerEnabler && $session->getId() === $sessionId) { + if ($this->sessionTrackerEnabler && \in_array($sessionId, [true, $session->getId()], true)) { $usageIndexReference = $usageIndexValue; } } diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php index 0d05319068ce..82a5f917d98e 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php @@ -344,6 +344,26 @@ public function testDeauthenticatedEvent() $this->assertNull($tokenStorage->getToken()); } + /** + * @requires function \Symfony\Component\HttpFoundation\Request::getPreferredFormat + */ + public function testWithPreviousNotStartedSession() + { + $session = new Session(new MockArraySessionStorage()); + + $request = new Request(); + $request->setSession($session); + $request->cookies->set('MOCKSESSID', true); + + $usageIndex = $session->getUsageIndex(); + + $tokenStorage = new TokenStorage(); + $listener = new ContextListener($tokenStorage, [], 'context_key', null, null, null, [$tokenStorage, 'getToken']); + $listener(new RequestEvent($this->getMockBuilder(HttpKernelInterface::class)->getMock(), $request, HttpKernelInterface::MASTER_REQUEST)); + + $this->assertSame($usageIndex, $session->getUsageIndex()); + } + protected function runSessionOnKernelResponse($newToken, $original = null) { $session = new Session(new MockArraySessionStorage());