Browse Source

Set session.gc_maxlifetime by default.

In the default case of using files for sessions, files could
be garbage collected earlier than expected based on other session
settings.  Always set session.gc_maxlifetime so session files are
garbage collected correctly.

Fixes #2901
mark_story 14 years ago
parent
commit
b27a3aab7b

+ 3 - 0
lib/Cake/Model/Datasource/CakeSession.php

@@ -470,6 +470,9 @@ class CakeSession {
 		if (!empty($sessionConfig['handler'])) {
 			$sessionConfig['ini']['session.save_handler'] = 'user';
 		}
+		if (!isset($sessionConfig['ini']['session.gc_maxlifetime'])) {
+			$sessionConfig['ini']['session.gc_maxlifetime'] = $sessionConfig['timeout'] * 60;
+		}
 
 		if (empty($_SESSION)) {
 			if (!empty($sessionConfig['ini']) && is_array($sessionConfig['ini'])) {

+ 2 - 0
lib/Cake/Test/Case/Model/Datasource/CakeSessionTest.php

@@ -715,6 +715,8 @@ class CakeSessionTest extends CakeTestCase {
 		TestCakeSession::start();
 		$this->assertEquals(400, Configure::read('Session.cookieTimeout'));
 		$this->assertEquals(400, Configure::read('Session.timeout'));
+		$this->assertEquals(400 * 60, ini_get('session.cookie_lifetime'));
+		$this->assertEquals(400 * 60, ini_get('session.gc_maxlifetime'));
 
 		$_SESSION = null;
 		Configure::write('Session', array(