Browse Source

Make session cookie path setting a bit DRYer.

ADmad 11 years ago
parent
commit
d3f43abd88
3 changed files with 20 additions and 8 deletions
  1. 2 2
      src/Network/Request.php
  2. 3 4
      src/Network/Session.php
  3. 15 2
      tests/TestCase/Network/SessionTest.php

+ 2 - 2
src/Network/Request.php

@@ -158,7 +158,7 @@ class Request implements \ArrayAccess {
 		list($base, $webroot) = static::_base();
 		$sessionConfig = (array)Configure::read('Session') + [
 			'defaults' => 'php',
-			'cookiePath' => $base ?: '/'
+			'cookiePath' => $base
 		];
 
 		$config = array(
@@ -229,7 +229,7 @@ class Request implements \ArrayAccess {
 
 		if (empty($config['session'])) {
 			$config['session'] = new Session([
-				'cookiePath' => $config['base'] ?: '/'
+				'cookiePath' => $config['base']
 			]);
 		}
 

+ 3 - 4
src/Network/Session.php

@@ -200,10 +200,9 @@ class Session {
 			$config['ini']['session.name'] = $config['cookie'];
 		}
 
-		if (isset($config['cookiePath']) &&
-			!isset($config['ini']['session.cookie_path'])
-		) {
-			$config['ini']['session.cookie_path'] = $config['cookiePath'];
+		if (!isset($config['ini']['session.cookie_path'])) {
+			$cookiePath = empty($config['cookiePath']) ? '/' : $config['cookiePath'];
+			$config['ini']['session.cookie_path'] = $cookiePath;
 		}
 
 		if (!empty($config['ini']) && is_array($config['ini'])) {

+ 15 - 2
tests/TestCase/Network/SessionTest.php

@@ -111,7 +111,6 @@ class SessionTest extends TestCase {
 		$_SESSION = null;
 
 		$config = array(
-			'cookiePath' => '/base',
 			'cookie' => 'test',
 			'checkAgent' => false,
 			'timeout' => 86400,
@@ -125,7 +124,21 @@ class SessionTest extends TestCase {
 		$this->assertEquals('', ini_get('session.use_trans_sid'), 'Ini value is incorrect');
 		$this->assertEquals('example.com', ini_get('session.referer_check'), 'Ini value is incorrect');
 		$this->assertEquals('test', ini_get('session.name'), 'Ini value is incorrect');
-		$this->assertEquals('/base', ini_get('session.cookie_path'), 'Ini value is incorrect');
+	}
+
+/**
+ * test session cookie path setting
+ *
+ * @return void
+ */
+	public function testCookiePath() {
+		ini_set('session.cookie_path', '/foo');
+
+		$session = new Session();
+		$this->assertEquals('/', ini_get('session.cookie_path'));
+
+		$session = new Session(['cookiePath' => '/base']);
+		$this->assertEquals('/base', ini_get('session.cookie_path'));
 	}
 
 /**