[HttpFoundation] Validate/cast cookie expire time
This commit is contained in:
parent
ee69018bf4
commit
8215dbdb31
@ -56,7 +56,7 @@ class Cookie
|
|||||||
} elseif (!is_numeric($expire)) {
|
} elseif (!is_numeric($expire)) {
|
||||||
$expire = strtotime($expire);
|
$expire = strtotime($expire);
|
||||||
|
|
||||||
if (false === $expire || -1 === $expire) {
|
if (false === $expire) {
|
||||||
throw new \InvalidArgumentException('The cookie expiration time is not valid.');
|
throw new \InvalidArgumentException('The cookie expiration time is not valid.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -64,7 +64,7 @@ class Cookie
|
|||||||
$this->name = $name;
|
$this->name = $name;
|
||||||
$this->value = $value;
|
$this->value = $value;
|
||||||
$this->domain = $domain;
|
$this->domain = $domain;
|
||||||
$this->expire = $expire;
|
$this->expire = 0 < $expire ? (int) $expire : 0;
|
||||||
$this->path = empty($path) ? '/' : $path;
|
$this->path = empty($path) ? '/' : $path;
|
||||||
$this->secure = (bool) $secure;
|
$this->secure = (bool) $secure;
|
||||||
$this->httpOnly = (bool) $httpOnly;
|
$this->httpOnly = (bool) $httpOnly;
|
||||||
@ -84,7 +84,7 @@ class Cookie
|
|||||||
} else {
|
} else {
|
||||||
$str .= urlencode($this->getValue());
|
$str .= urlencode($this->getValue());
|
||||||
|
|
||||||
if ($this->getExpiresTime() !== 0) {
|
if (0 !== $this->getExpiresTime()) {
|
||||||
$str .= '; expires='.gmdate('D, d-M-Y H:i:s T', $this->getExpiresTime());
|
$str .= '; expires='.gmdate('D, d-M-Y H:i:s T', $this->getExpiresTime());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,14 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
|||||||
*/
|
*/
|
||||||
public function testInvalidExpiration()
|
public function testInvalidExpiration()
|
||||||
{
|
{
|
||||||
$cookie = new Cookie('MyCookie', 'foo', 'bar');
|
new Cookie('MyCookie', 'foo', 'bar');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNegativeExpirationIsNotPossible()
|
||||||
|
{
|
||||||
|
$cookie = new Cookie('foo', 'bar', -100);
|
||||||
|
|
||||||
|
$this->assertSame(0, $cookie->getExpiresTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetValue()
|
public function testGetValue()
|
||||||
@ -77,6 +84,13 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals(3600, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date');
|
$this->assertEquals(3600, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetExpiresTimeIsCastToInt()
|
||||||
|
{
|
||||||
|
$cookie = new Cookie('foo', 'bar', 3600.9);
|
||||||
|
|
||||||
|
$this->assertSame(3600, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date as an integer');
|
||||||
|
}
|
||||||
|
|
||||||
public function testConstructorWithDateTime()
|
public function testConstructorWithDateTime()
|
||||||
{
|
{
|
||||||
$expire = new \DateTime();
|
$expire = new \DateTime();
|
||||||
@ -143,12 +157,12 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
|||||||
public function testToString()
|
public function testToString()
|
||||||
{
|
{
|
||||||
$cookie = new Cookie('foo', 'bar', strtotime('Fri, 20-May-2011 15:25:52 GMT'), '/', '.myfoodomain.com', true);
|
$cookie = new Cookie('foo', 'bar', strtotime('Fri, 20-May-2011 15:25:52 GMT'), '/', '.myfoodomain.com', true);
|
||||||
$this->assertEquals('foo=bar; expires=Fri, 20-May-2011 15:25:52 GMT; path=/; domain=.myfoodomain.com; secure; httponly', $cookie->__toString(), '->__toString() returns string representation of the cookie');
|
$this->assertEquals('foo=bar; expires=Fri, 20-May-2011 15:25:52 GMT; path=/; domain=.myfoodomain.com; secure; httponly', (string) $cookie, '->__toString() returns string representation of the cookie');
|
||||||
|
|
||||||
$cookie = new Cookie('foo', null, 1, '/admin/', '.myfoodomain.com');
|
$cookie = new Cookie('foo', null, 1, '/admin/', '.myfoodomain.com');
|
||||||
$this->assertEquals('foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; path=/admin/; domain=.myfoodomain.com; httponly', $cookie->__toString(), '->__toString() returns string representation of a cleared cookie if value is NULL');
|
$this->assertEquals('foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; path=/admin/; domain=.myfoodomain.com; httponly', (string) $cookie, '->__toString() returns string representation of a cleared cookie if value is NULL');
|
||||||
|
|
||||||
$cookie = new Cookie('foo', 'bar', 0, '/', '');
|
$cookie = new Cookie('foo', 'bar', 0, '/', '');
|
||||||
$this->assertEquals('foo=bar; path=/; httponly', $cookie->__toString());
|
$this->assertEquals('foo=bar; path=/; httponly', (string) $cookie);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user