From 6b38031a1e16e94d5bafcbcce4bdcb2d6b3680ed Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Wed, 7 Feb 2018 11:03:32 +1300 Subject: [PATCH] BUG Fix Director::test() not persisting removed session keys on teardown --- src/Control/Director.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Control/Director.php b/src/Control/Director.php index 316148578..26f8cc464 100644 --- a/src/Control/Director.php +++ b/src/Control/Director.php @@ -207,12 +207,17 @@ class Director implements TemplateGlobalProvider if ($session instanceof Session) { // Note: If passing $session as object, ensure that changes are written back // This is important for classes such as FunctionalTest which emulate cross-request persistence - $newVars['_SESSION'] = $session->getAll(); - $finally[] = function () use ($session) { + $newVars['_SESSION'] = $sessionArray = $session->getAll(); + $finally[] = function () use ($session, $sessionArray) { if (isset($_SESSION)) { + // Set new / updated keys foreach ($_SESSION as $key => $value) { $session->set($key, $value); } + // Unset removed keys + foreach (array_diff_key($sessionArray, $_SESSION) as $key => $value) { + $session->clear($key); + } } }; } else {