[HttpFoundation] Add support for sending raw cookies in the response
This commit is contained in:
parent
bb2727a680
commit
43760a69b6
@ -25,6 +25,7 @@ class Cookie
|
||||
protected $path;
|
||||
protected $secure;
|
||||
protected $httpOnly;
|
||||
private $raw;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
@ -36,10 +37,11 @@ class Cookie
|
||||
* @param string $domain The domain that the cookie is available to
|
||||
* @param bool $secure Whether the cookie should only be transmitted over a secure HTTPS connection from the client
|
||||
* @param bool $httpOnly Whether the cookie will be made accessible only through the HTTP protocol
|
||||
* @param bool $raw Whether the cookie value should be sent with no url encoding
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function __construct($name, $value = null, $expire = 0, $path = '/', $domain = null, $secure = false, $httpOnly = true)
|
||||
public function __construct($name, $value = null, $expire = 0, $path = '/', $domain = null, $secure = false, $httpOnly = true, $raw = false)
|
||||
{
|
||||
// from PHP source code
|
||||
if (preg_match("/[=,; \t\r\n\013\014]/", $name)) {
|
||||
@ -68,6 +70,7 @@ class Cookie
|
||||
$this->path = empty($path) ? '/' : $path;
|
||||
$this->secure = (bool) $secure;
|
||||
$this->httpOnly = (bool) $httpOnly;
|
||||
$this->raw = (bool) $raw;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -187,4 +190,14 @@ class Cookie
|
||||
{
|
||||
return $this->expire < time();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the cookie value should be sent with no url encoding.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isRaw()
|
||||
{
|
||||
return $this->raw;
|
||||
}
|
||||
}
|
||||
|
@ -343,8 +343,12 @@ class Response
|
||||
|
||||
// cookies
|
||||
foreach ($this->headers->getCookies() as $cookie) {
|
||||
if ($cookie->isRaw()) {
|
||||
setrawcookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly());
|
||||
} else {
|
||||
setcookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly());
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@ -151,4 +151,13 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
||||
$cookie = new Cookie('foo', 'bar', 0, '/', '');
|
||||
$this->assertEquals('foo=bar; path=/; httponly', $cookie->__toString());
|
||||
}
|
||||
|
||||
public function testRawCookie()
|
||||
{
|
||||
$cookie = new Cookie('foo', 'bar', 3600, '/', '.myfoodomain.com', false, true);
|
||||
$this->assertFalse($cookie->isRaw());
|
||||
|
||||
$cookie = new Cookie('foo', 'bar', 3600, '/', '.myfoodomain.com', false, true, true);
|
||||
$this->assertTrue($cookie->isRaw());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user