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 3130dbb

Browse filesBrowse files
Fix by check for native session variable
1 parent 0a85358 commit 3130dbb
Copy full SHA for 3130dbb

File tree

Expand file treeCollapse file tree

2 files changed

+69
-5
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+69
-5
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public function onKernelResponse(ResponseEvent $event)
154154
$request = $event->getRequest();
155155
$requestSessionCookieId = $request->cookies->get($sessionName);
156156

157-
$isSessionEmpty = $session->isEmpty() && empty($_SESSION);
157+
$isSessionEmpty = $session->isEmpty() && empty($_SESSION); // checking native $_SESSION to keep compatibility to php bridge sessions
158158
if ($requestSessionCookieId && $isSessionEmpty) {
159159
$response->headers->clearCookie(
160160
$sessionName,

‎src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php
+68-4Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,6 @@ public function testSessionCookieNotWrittenCookieGiven()
218218
public function testSessionCookieClearedWhenInvalidated()
219219
{
220220
$session = new Session();
221-
$session->set('hello', 'world');
222-
$sessionId = $session->getId();
223221

224222
$container = new Container();
225223
$container->set('initialized_session', $session);
@@ -228,10 +226,14 @@ public function testSessionCookieClearedWhenInvalidated()
228226
$kernel = $this->createMock(HttpKernelInterface::class);
229227

230228
$request = new Request();
231-
$request->cookies->set('PHPSESSID', $sessionId);
232229
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
233230

234-
$session->remove('hello');
231+
$session->start();
232+
$sessionId = $session->getId();
233+
$this->assertNotEmpty($sessionId);
234+
$request->cookies->set($session->getName(), $sessionId);
235+
$_SESSION['hello'] = 'world'; // check compatibility to php session bridge
236+
235237
$session->invalidate();
236238

237239
$response = new Response();
@@ -245,6 +247,68 @@ public function testSessionCookieClearedWhenInvalidated()
245247
$this->assertTrue($sessionCookie->isCleared());
246248
}
247249

250+
/**
251+
* @runInSeparateProcess
252+
*/
253+
public function testSessionCookieNotClearedWhenOtherVariablesSet()
254+
{
255+
$session = new Session();
256+
257+
$container = new Container();
258+
$container->set('initialized_session', $session);
259+
260+
$listener = new SessionListener($container);
261+
$kernel = $this->createMock(HttpKernelInterface::class);
262+
263+
$request = new Request();
264+
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
265+
266+
$session->start();
267+
$sessionId = $session->getId();
268+
$this->assertNotEmpty($sessionId);
269+
$request->cookies->set($session->getName(), $sessionId);
270+
$_SESSION['hello'] = 'world';
271+
272+
$response = new Response();
273+
$listener->onKernelResponse(new ResponseEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $response));
274+
275+
$cookies = $response->headers->getCookies();
276+
$this->assertCount(0, $cookies);
277+
}
278+
279+
/**
280+
* @runInSeparateProcess
281+
*/
282+
public function testSessionCookieSetWhenOtherNativeVariablesSet()
283+
{
284+
$session = new Session();
285+
286+
$container = new Container();
287+
$container->set('initialized_session', $session);
288+
289+
$listener = new SessionListener($container);
290+
$kernel = $this->createMock(HttpKernelInterface::class);
291+
292+
$request = new Request();
293+
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
294+
295+
$session->start();
296+
$sessionId = $session->getId();
297+
$this->assertNotEmpty($sessionId);
298+
$_SESSION['hello'] = 'world';
299+
300+
$response = new Response();
301+
$listener->onKernelResponse(new ResponseEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $response));
302+
303+
$cookies = $response->headers->getCookies();
304+
$this->assertCount(1, $cookies);
305+
$sessionCookie = $cookies[0];
306+
307+
$this->assertSame('PHPSESSID', $sessionCookie->getName());
308+
$this->assertNotEmpty($sessionCookie->getValue());
309+
$this->assertFalse($sessionCookie->isCleared());
310+
}
311+
248312
public function testOnlyTriggeredOnMainRequest()
249313
{
250314
$listener = $this->getMockForAbstractClass(AbstractSessionListener::class);

0 commit comments

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