Merge pull request #7840 from open-sausages/pulls/4/fix-session-test-unset

BUG Fix Director::test() not persisting removed session keys on teardown
This commit is contained in:
Chris Joe 2018-02-07 11:44:55 +13:00 committed by GitHub
commit aac7bbd3b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -206,12 +206,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 {