Browse Source

Add support for key => value cookies.

This makes using simple arrays easier, and I feel it is a long standing
omission from HttpSocket.

Fixes #3771
mark_story 13 years ago
parent
commit
4d8dd12449

+ 6 - 1
lib/Cake/Network/Http/HttpSocket.php

@@ -942,7 +942,12 @@ class HttpSocket extends CakeSocket {
 	public function buildCookies($cookies) {
 		$header = array();
 		foreach ($cookies as $name => $cookie) {
-			$header[] = $name . '=' . $this->_escapeToken($cookie['value'], array(';'));
+			if (is_array($cookie)) {
+				$value = $this->_escapeToken($cookie['value'], array(';'));
+			} else {
+				$value = $this->_escapeToken($cookie, array(';'));
+			}
+			$header[] = $name . '=' . $value;
 		}
 		return $this->_buildHeader(array('Cookie' => implode('; ', $header)), 'pragmatic');
 	}

+ 3 - 2
lib/Cake/Test/Case/Network/Http/HttpSocketTest.php

@@ -1590,9 +1590,10 @@ class HttpSocketTest extends CakeTestCase {
 			'people' => array(
 				'value' => 'jim,jack,johnny;',
 				'path' => '/accounts'
-			)
+			),
+			'key' => 'value'
 		);
-		$expect = "Cookie: foo=bar; people=jim,jack,johnny\";\"\r\n";
+		$expect = "Cookie: foo=bar; people=jim,jack,johnny\";\"; key=value\r\n";
 		$result = $this->Socket->buildCookies($cookies);
 		$this->assertEquals($expect, $result);
 	}