diff --git a/lib/Cake/Model/Datasource/CakeSession.php b/lib/Cake/Model/Datasource/CakeSession.php index f232ec306..9e04158b5 100644 --- a/lib/Cake/Model/Datasource/CakeSession.php +++ b/lib/Cake/Model/Datasource/CakeSession.php @@ -374,7 +374,7 @@ class CakeSession { * * @param string|null $name The name of the session variable (or a path as sent to Set.extract) * @return mixed The value of the session variable, null if session not available, - * session not started, or provided name not found in the session. + * session not started, or provided name not found in the session, false on failure. */ public static function read($name = null) { if (empty($name) && $name !== null) { @@ -478,11 +478,14 @@ class CakeSession { * @return void */ public static function clear($renew = true) { - $_SESSION = null; - if ($renew) { - self::$id = null; - self::renew(); + if (!$renew) { + $_SESSION = array(); + return; } + + $_SESSION = null; + self::$id = null; + self::renew(); } /** diff --git a/lib/Cake/Test/Case/Model/Datasource/CakeSessionTest.php b/lib/Cake/Test/Case/Model/Datasource/CakeSessionTest.php index 2b7cac579..2c691844d 100644 --- a/lib/Cake/Test/Case/Model/Datasource/CakeSessionTest.php +++ b/lib/Cake/Test/Case/Model/Datasource/CakeSessionTest.php @@ -413,6 +413,14 @@ class CakeSessionTest extends CakeTestCase { TestCakeSession::clear(false); $this->assertFalse(TestCakeSession::check('Delete.me')); $this->assertFalse(TestCakeSession::check('Delete')); + + TestCakeSession::write('Some.string', 'value'); + TestCakeSession::clear(false); + $this->assertNull(TestCakeSession::read('Some')); + + TestCakeSession::write('Some.string.array', array('values')); + TestCakeSession::clear(false); + $this->assertFalse(TestCakeSession::read()); } /**