BUG Fix Director::test() not persisting removed session keys on teardown

This commit is contained in:
Damian Mooyman 2018-02-07 11:03:32 +13:00 committed by Robbie Averill
parent e7e32d13a3
commit 5bff64b47b
1 changed files with 7 additions and 2 deletions

View File

@ -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 {