From 9e942768c9d1fb2d5ed5f59714f68cda1a6d89b5 Mon Sep 17 00:00:00 2001 From: Peter Bowyer Date: Fri, 6 Sep 2019 09:27:37 +0100 Subject: [PATCH] [HttpKernel] Fix Apache mod_expires Session Cache-Control issue --- .../HttpKernel/EventListener/AbstractSessionListener.php | 1 + .../Tests/EventListener/SessionListenerTest.php | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php b/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php index aee5d6f88f50..0a6bb4f79a66 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php @@ -56,6 +56,7 @@ public function onKernelResponse(FilterResponseEvent $event) if ($session instanceof Session ? $session->getUsageIndex() !== end($this->sessionUsageStack) : $session->isStarted()) { $event->getResponse() + ->setExpires(new \DateTime()) ->setPrivate() ->setMaxAge(0) ->headers->addCacheControlDirective('must-revalidate'); diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php index f0bac60505bc..e8ab0deed490 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php @@ -75,6 +75,9 @@ public function testResponseIsPrivate() $this->assertTrue($response->headers->hasCacheControlDirective('private')); $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate')); $this->assertSame('0', $response->headers->getCacheControlDirective('max-age')); + + $this->assertTrue($response->headers->has('Expires')); + $this->assertLessThanOrEqual((new \DateTime('now', new \DateTimeZone('UTC'))), (new \DateTime($response->headers->get('Expires')))); } public function testSurrogateMasterRequestIsPublic() @@ -104,10 +107,15 @@ public function testSurrogateMasterRequestIsPublic() $this->assertFalse($response->headers->hasCacheControlDirective('must-revalidate')); $this->assertSame('30', $response->headers->getCacheControlDirective('max-age')); + $this->assertFalse($response->headers->has('Expires')); + $listener->onKernelResponse(new FilterResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response)); $this->assertTrue($response->headers->hasCacheControlDirective('private')); $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate')); $this->assertSame('0', $response->headers->getCacheControlDirective('max-age')); + + $this->assertTrue($response->headers->has('Expires')); + $this->assertLessThanOrEqual((new \DateTime('now', new \DateTimeZone('UTC'))), (new \DateTime($response->headers->get('Expires')))); } }