Cookie
class
Cookie
Represents a cookie.
Constants
SAMESITE_LAX = 'lax'; |
|
SAMESITE_STRICT = 'strict'; |
|
Properties
protected
|
$name |
|
|
protected
|
$value |
|
|
protected
|
$domain |
|
|
protected
|
$expire |
|
|
protected
|
$path |
|
|
protected
|
$secure |
|
|
protected
|
$httpOnly |
|
|
Methods
public static
|
Cookie |
fromString(string $cookie, bool $decode = false)
|
Creates cookie from raw header string. |
|
public
|
|
__construct(string $name, string $value = null, int|string|DateTimeInterface $expire, string|null $path = '/', string $domain = null, bool $secure = false, bool $httpOnly = true, bool $raw = false, string $sameSite = null)
|
No description
|
|
public
|
string |
__toString()
|
Returns the cookie as a string. |
|
public
|
string |
getName()
|
Gets the name of the cookie. |
|
public
|
string|null |
getValue()
|
Gets the value of the cookie. |
|
public
|
string|null |
getDomain()
|
Gets the domain that the cookie is available to. |
|
public
|
int |
getExpiresTime()
|
Gets the time the cookie expires. |
|
public
|
int |
getMaxAge()
|
Gets the max-age attribute. |
|
public
|
string |
getPath()
|
Gets the path on the server in which the cookie will be available on. |
|
public
|
bool |
isSecure()
|
Checks whether the cookie should only be transmitted over a secure HTTPS connection from the client. |
|
public
|
bool |
isHttpOnly()
|
Checks whether the cookie will be made accessible only through the HTTP protocol. |
|
public
|
bool |
isCleared()
|
Whether this cookie is about to be cleared. |
|
public
|
bool |
isRaw()
|
Checks if the cookie value should be sent with no url encoding. |
|
public
|
string|null |
getSameSite()
|
Gets the SameSite attribute. |
|
Details
fromString()
public static Cookie fromString(string $cookie, bool $decode = false)
Creates cookie from raw header string.
Parameters
string |
$cookie |
|
bool |
$decode |
|
Return Value
__construct()
public __construct(string $name, string $value = null, int|string|DateTimeInterface $expire, string|null $path = '/', string $domain = null, bool $secure = false, bool $httpOnly = true, bool $raw = false, string $sameSite = null)
Parameters
string |
$name |
The name of the cookie |
string |
$value |
The value of the cookie |
int|string|DateTimeInterface |
$expire |
The time the cookie expires |
string|null |
$path |
The path on the server in which the cookie will be available on |
string |
$domain |
The domain that the cookie is available to |
bool |
$secure |
Whether the cookie should only be transmitted over a secure HTTPS connection from the client |
bool |
$httpOnly |
Whether the cookie will be made accessible only through the HTTP protocol |
bool |
$raw |
Whether the cookie value should be sent with no url encoding |
string |
$sameSite |
Whether the cookie will be available for cross-site requests |
Exceptions
__toString()
public string __toString()
Returns the cookie as a string.
Return Value
getName()
public string getName()
Gets the name of the cookie.
Return Value
getValue()
public string|null getValue()
Gets the value of the cookie.
Return Value
getDomain()
public string|null getDomain()
Gets the domain that the cookie is available to.
Return Value
getExpiresTime()
public int getExpiresTime()
Gets the time the cookie expires.
Return Value
getMaxAge()
public int getMaxAge()
Gets the max-age attribute.
Return Value
getPath()
public string getPath()
Gets the path on the server in which the cookie will be available on.
Return Value
isSecure()
public bool isSecure()
Checks whether the cookie should only be transmitted over a secure HTTPS connection from the client.
Return Value
isHttpOnly()
public bool isHttpOnly()
Checks whether the cookie will be made accessible only through the HTTP protocol.
Return Value
isCleared()
public bool isCleared()
Whether this cookie is about to be cleared.
Return Value
isRaw()
public bool isRaw()
Checks if the cookie value should be sent with no url encoding.
Return Value
getSameSite()
public string|null getSameSite()
Gets the SameSite attribute.
Return Value
Source code
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Khan\Component\HttpFoundation;
/**
* Represents a cookie.
*
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
*/
class Cookie
{
protected $name;
protected $value;
protected $domain;
protected $expire;
protected $path;
protected $secure;
protected $httpOnly;
private $raw;
private $sameSite;
const SAMESITE_LAX = 'lax';
const SAMESITE_STRICT = 'strict';
/**
* Creates cookie from raw header string.
*
* @param string $cookie
* @param bool $decode
*
* @return static
*/
public static function fromString($cookie, $decode = false)
{
$data = array(
'expires' => 0,
'path' => '/',
'domain' => null,
'secure' => false,
'httponly' => false,
'raw' => !$decode,
'samesite' => null,
);
foreach (explode(';', $cookie) as $part) {
if (false === strpos($part, '=')) {
$key = trim($part);
$value = true;
} else {
list($key, $value) = explode('=', trim($part), 2);
$key = trim($key);
$value = trim($value);
}
if (!isset($data['name'])) {
$data['name'] = $decode ? urldecode($key) : $key;
$data['value'] = true === $value ? null : ($decode ? urldecode($value) : $value);
continue;
}
switch ($key = strtolower($key)) {
case 'name':
case 'value':
break;
case 'max-age':
$data['expires'] = time() + (int) $value;
break;
default:
$data[$key] = $value;
break;
}
}
return new static($data['name'], $data['value'], $data['expires'], $data['path'], $data['domain'], $data['secure'], $data['httponly'], $data['raw'], $data['samesite']);
}
/**
* @param string $name The name of the cookie
* @param string|null $value The value of the cookie
* @param int|string|\DateTimeInterface $expire The time the cookie expires
* @param string $path The path on the server in which the cookie will be available on
* @param string|null $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
* @param string|null $sameSite Whether the cookie will be available for cross-site requests
*
* @throws \InvalidArgumentException
*/
public function __construct(string $name, string $value = null, $expire = 0, ?string $path = '/', string $domain = null, bool $secure = false, bool $httpOnly = true, bool $raw = false, string $sameSite = null)
{
// from PHP source code
if (preg_match("/[=,; \t\r\n\013\014]/", $name)) {
throw new \InvalidArgumentException(sprintf('The cookie name "%s" contains invalid characters.', $name));
}
if (empty($name)) {
throw new \InvalidArgumentException('The cookie name cannot be empty.');
}
// convert expiration time to a Unix timestamp
if ($expire instanceof \DateTimeInterface) {
$expire = $expire->format('U');
} elseif (!is_numeric($expire)) {
$expire = strtotime($expire);
if (false === $expire) {
throw new \InvalidArgumentException('The cookie expiration time is not valid.');
}
}
$this->name = $name;
$this->value = $value;
$this->domain = $domain;
$this->expire = 0 < $expire ? (int) $expire : 0;
$this->path = empty($path) ? '/' : $path;
$this->secure = $secure;
$this->httpOnly = $httpOnly;
$this->raw = $raw;
if (null !== $sameSite) {
$sameSite = strtolower($sameSite);
}
if (!in_array($sameSite, array(self::SAMESITE_LAX, self::SAMESITE_STRICT, null), true)) {
throw new \InvalidArgumentException('The "sameSite" parameter value is not valid.');
}
$this->sameSite = $sameSite;
}
/**
* Returns the cookie as a string.
*
* @return string The cookie
*/
public function __toString()
{
$str = ($this->isRaw() ? $this->getName() : urlencode($this->getName())).'=';
if ('' === (string) $this->getValue()) {
$str .= 'deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; max-age=-31536001';
} else {
$str .= $this->isRaw() ? $this->getValue() : rawurlencode($this->getValue());
if (0 !== $this->getExpiresTime()) {
$str .= '; expires='.gmdate('D, d-M-Y H:i:s T', $this->getExpiresTime()).'; max-age='.$this->getMaxAge();
}
}
if ($this->getPath()) {
$str .= '; path='.$this->getPath();
}
if ($this->getDomain()) {
$str .= '; domain='.$this->getDomain();
}
if (true === $this->isSecure()) {
$str .= '; secure';
}
if (true === $this->isHttpOnly()) {
$str .= '; httponly';
}
if (null !== $this->getSameSite()) {
$str .= '; samesite='.$this->getSameSite();
}
return $str;
}
/**
* Gets the name of the cookie.
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Gets the value of the cookie.
*
* @return string|null
*/
public function getValue()
{
return $this->value;
}
/**
* Gets the domain that the cookie is available to.
*
* @return string|null
*/
public function getDomain()
{
return $this->domain;
}
/**
* Gets the time the cookie expires.
*
* @return int
*/
public function getExpiresTime()
{
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.
*
* @return string
*/
public function getPath()
{
return $this->path;
}
/**
* Checks whether the cookie should only be transmitted over a secure HTTPS connection from the client.
*
* @return bool
*/
public function isSecure()
{
return $this->secure;
}
/**
* Checks whether the cookie will be made accessible only through the HTTP protocol.
*
* @return bool
*/
public function isHttpOnly()
{
return $this->httpOnly;
}
/**
* Whether this cookie is about to be cleared.
*
* @return bool
*/
public function isCleared()
{
return $this->expire < time();
}
/**
* Checks if the cookie value should be sent with no url encoding.
*
* @return bool
*/
public function isRaw()
{
return $this->raw;
}
/**
* Gets the SameSite attribute.
*
* @return string|null
*/
public function getSameSite()
{
return $this->sameSite;
}
}