diff --git a/src/Control/Session.php b/src/Control/Session.php index a5d904468..f0761c80e 100644 --- a/src/Control/Session.php +++ b/src/Control/Session.php @@ -323,6 +323,12 @@ class Session } session_start(); + + // Session start emits a cookie, but only if there's no existing session. If there is a session timeout + // tied to this request, make sure the session is held for the entire timeout by refreshing the cookie age. + if ($timeout && $this->requestContainsSessionId($request)) { + Cookie::set(session_name(), session_id(), $timeout / 86400, $path, $domain ?: null, $secure, true); + } } else { // If headers are sent then we can't have a session_cache_limiter otherwise we'll get a warning session_cache_limiter(null); diff --git a/tests/php/Forms/TreeMultiselectFieldTest.php b/tests/php/Forms/TreeMultiselectFieldTest.php index 5b2f14a65..e2cc56741 100644 --- a/tests/php/Forms/TreeMultiselectFieldTest.php +++ b/tests/php/Forms/TreeMultiselectFieldTest.php @@ -7,11 +7,17 @@ use SilverStripe\Dev\SapphireTest; use SilverStripe\Forms\Form; use SilverStripe\Forms\FormTemplateHelper; use SilverStripe\Forms\TreeMultiselectField; +use SilverStripe\ORM\Tests\HierarchyTest\TestObject; +use SilverStripe\View\SSViewer; class TreeMultiselectFieldTest extends SapphireTest { protected static $fixture_file = 'TreeDropdownFieldTest.yml'; + protected static $extra_dataobjects = [ + TestObject::class, + ]; + protected $formId = 'TheFormID'; protected $fieldName = 'TestTree'; @@ -54,6 +60,9 @@ class TreeMultiselectFieldTest extends SapphireTest { parent::setUp(); + // Don't let other themes interfere with these tests + SSViewer::set_themes([]); + $this->form = $this->buildFormMock(); $this->field = $this->buildField($this->form); $this->folders = $this->loadFolders();