[HttpFoundation] Compute cookie max-age attribute
This commit is contained in:
parent
e98c068745
commit
8c28317f7e
@ -94,12 +94,12 @@ class Cookie
|
|||||||
$str = urlencode($this->getName()).'=';
|
$str = urlencode($this->getName()).'=';
|
||||||
|
|
||||||
if ('' === (string) $this->getValue()) {
|
if ('' === (string) $this->getValue()) {
|
||||||
$str .= 'deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001);
|
$str .= 'deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; max-age=-31536001';
|
||||||
} else {
|
} else {
|
||||||
$str .= urlencode($this->getValue());
|
$str .= urlencode($this->getValue());
|
||||||
|
|
||||||
if ($this->getExpiresTime() !== 0) {
|
if ($this->getExpiresTime() !== 0) {
|
||||||
$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()).'; max-age='.$this->getMaxAge();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,6 +166,16 @@ class Cookie
|
|||||||
return $this->expire;
|
return $this->expire;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the max-age attribute.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getMaxAge()
|
||||||
|
{
|
||||||
|
return 0 !== $this->expire ? $this->expire - time() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the path on the server in which the cookie will be available on.
|
* Gets the path on the server in which the cookie will be available on.
|
||||||
*
|
*
|
||||||
|
@ -72,9 +72,13 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function testGetExpiresTime()
|
public function testGetExpiresTime()
|
||||||
{
|
{
|
||||||
$cookie = new Cookie('foo', 'bar', 3600);
|
$cookie = new Cookie('foo', 'bar');
|
||||||
|
|
||||||
$this->assertEquals(3600, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date');
|
$this->assertEquals(0, $cookie->getExpiresTime(), '->getExpiresTime() returns the default expire date');
|
||||||
|
|
||||||
|
$cookie = new Cookie('foo', 'bar', $expire = time() + 3600);
|
||||||
|
|
||||||
|
$this->assertEquals($expire, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testConstructorWithDateTime()
|
public function testConstructorWithDateTime()
|
||||||
@ -107,21 +111,21 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function testGetDomain()
|
public function testGetDomain()
|
||||||
{
|
{
|
||||||
$cookie = new Cookie('foo', 'bar', 3600, '/', '.myfoodomain.com');
|
$cookie = new Cookie('foo', 'bar', 0, '/', '.myfoodomain.com');
|
||||||
|
|
||||||
$this->assertEquals('.myfoodomain.com', $cookie->getDomain(), '->getDomain() returns the domain name on which the cookie is valid');
|
$this->assertEquals('.myfoodomain.com', $cookie->getDomain(), '->getDomain() returns the domain name on which the cookie is valid');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testIsSecure()
|
public function testIsSecure()
|
||||||
{
|
{
|
||||||
$cookie = new Cookie('foo', 'bar', 3600, '/', '.myfoodomain.com', true);
|
$cookie = new Cookie('foo', 'bar', 0, '/', '.myfoodomain.com', true);
|
||||||
|
|
||||||
$this->assertTrue($cookie->isSecure(), '->isSecure() returns whether the cookie is transmitted over HTTPS');
|
$this->assertTrue($cookie->isSecure(), '->isSecure() returns whether the cookie is transmitted over HTTPS');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testIsHttpOnly()
|
public function testIsHttpOnly()
|
||||||
{
|
{
|
||||||
$cookie = new Cookie('foo', 'bar', 3600, '/', '.myfoodomain.com', false, true);
|
$cookie = new Cookie('foo', 'bar', 0, '/', '.myfoodomain.com', false, true);
|
||||||
|
|
||||||
$this->assertTrue($cookie->isHttpOnly(), '->isHttpOnly() returns whether the cookie is only transmitted over HTTP');
|
$this->assertTrue($cookie->isHttpOnly(), '->isHttpOnly() returns whether the cookie is only transmitted over HTTP');
|
||||||
}
|
}
|
||||||
@ -142,14 +146,14 @@ 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', $expire = 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; max-age='.($expire - time()).'; 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', $expire = time() - 31536001).'; max-age='.($expire - time()).'; 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRawCookie()
|
public function testRawCookie()
|
||||||
@ -160,4 +164,16 @@ class CookieTest extends \PHPUnit_Framework_TestCase
|
|||||||
$cookie = new Cookie('foo', 'bar', 3600, '/', '.myfoodomain.com', false, true, true);
|
$cookie = new Cookie('foo', 'bar', 3600, '/', '.myfoodomain.com', false, true, true);
|
||||||
$this->assertTrue($cookie->isRaw());
|
$this->assertTrue($cookie->isRaw());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetMaxAge()
|
||||||
|
{
|
||||||
|
$cookie = new Cookie('foo', 'bar');
|
||||||
|
$this->assertEquals(0, $cookie->getMaxAge());
|
||||||
|
|
||||||
|
$cookie = new Cookie('foo', 'bar', $expire = time() + 100);
|
||||||
|
$this->assertEquals($expire - time(), $cookie->getMaxAge());
|
||||||
|
|
||||||
|
$cookie = new Cookie('foo', 'bar', $expire = time() - 100);
|
||||||
|
$this->assertEquals($expire - time(), $cookie->getMaxAge());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ class ResponseHeaderBagTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$bag->clearCookie('foo');
|
$bag->clearCookie('foo');
|
||||||
|
|
||||||
$this->assertRegExp('#^Set-Cookie: foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; path=/; httponly#m', $bag->__toString());
|
$this->assertRegExp('#^Set-Cookie: foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; max-age=-31536001; path=/; httponly#m', $bag->__toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testClearCookieSecureNotHttpOnly()
|
public function testClearCookieSecureNotHttpOnly()
|
||||||
@ -137,7 +137,7 @@ class ResponseHeaderBagTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$bag->clearCookie('foo', '/', null, true, false);
|
$bag->clearCookie('foo', '/', null, true, false);
|
||||||
|
|
||||||
$this->assertRegExp('#^Set-Cookie: foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; path=/; secure#m', $bag->__toString());
|
$this->assertRegExp('#^Set-Cookie: foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; max-age=-31536001; path=/; secure#m', $bag->__toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testReplace()
|
public function testReplace()
|
||||||
|
Reference in New Issue
Block a user