diff --git a/system/Session/Session.php b/system/Session/Session.php index 0b27b03fa46e..99236e7efd7b 100644 --- a/system/Session/Session.php +++ b/system/Session/Session.php @@ -188,6 +188,7 @@ public function __construct(SessionHandlerInterface $driver, App $config) $cookie = config('Cookie'); $this->cookie = new Cookie($this->sessionCookieName, '', [ + 'prefix' => $cookie->prefix ?? $config->cookiePrefix, 'expires' => $this->sessionExpiration === 0 ? 0 : time() + $this->sessionExpiration, 'path' => $cookie->path ?? $config->cookiePath, 'domain' => $cookie->domain ?? $config->cookieDomain, @@ -289,7 +290,7 @@ protected function configure() if (empty($this->sessionCookieName)) { $this->sessionCookieName = ini_get('session.name'); } else { - ini_set('session.name', $this->sessionCookieName); + ini_set('session.name', $this->cookie->getPrefixedName()); } $sameSite = $this->cookie->getSameSite() ?: ucfirst(Cookie::SAMESITE_LAX); diff --git a/tests/system/Session/SessionTest.php b/tests/system/Session/SessionTest.php index 574ffaf99ce9..c638e98822b1 100644 --- a/tests/system/Session/SessionTest.php +++ b/tests/system/Session/SessionTest.php @@ -644,4 +644,22 @@ public function testExpiresOnClose() $this->assertCount(1, $cookies); $this->assertSame(0, $cookies[0]->getExpiresTimestamp()); } + + public function testCookieCreatedHasNameWithPrefix() + { + $config = new CookieConfig(); + $config->prefix = 'test_'; + Factories::injectMock('config', CookieConfig::class, $config); + + $session = $this->getInstance(['sessionCookieName' => 'ci_session']); + + $session->start(); + + $cookies = $session->cookies; + $this->assertCount(1, $cookies); + $this->assertSame('test_', $cookies[0]->getPrefix()); + $this->assertSame('ci_session', $cookies[0]->getName()); + $this->assertSame('test_ci_session', $cookies[0]->getPrefixedName()); + $this->assertSame('test_ci_session', ini_get('session.name')); + } }