CookieJar.php
TLDR
The CookieJar.php
file in the Illuminate\Cookie
namespace is a class that provides methods for creating, managing, and manipulating cookies in an application. It allows for creating cookies with various options such as name, value, expiration time, path, domain, secure, and more. It also provides methods for queuing cookies to be sent with the next response and for managing queued cookies.
Methods
make
This method is used to create a new cookie instance. It takes in parameters such as name, value, expiration time in minutes, path, domain, secure, HTTP-only, raw, and sameSite options. It returns a Symfony\Component\HttpFoundation\Cookie
instance representing the created cookie.
forever
This method is used to create a cookie that lasts "forever" (400 days). It takes in parameters similar to the make
method and returns a Symfony\Component\HttpFoundation\Cookie
instance representing the created cookie.
forget
This method is used to expire a given cookie. It takes in the name of the cookie, and optionally, the path and domain. It returns a Symfony\Component\HttpFoundation\Cookie
instance representing the expired cookie.
hasQueued
This method is used to determine if a cookie has been queued for sending. It takes in the name of the cookie and optionally, the path. It returns a boolean value indicating whether the cookie has been queued.
queued
This method is used to retrieve a queued cookie instance. It takes in the name of the cookie, a default value to return if the cookie is not found, and optionally, the path. It returns a Symfony\Component\HttpFoundation\Cookie
instance representing the queued cookie, or null if the cookie is not found.
queue
This method is used to queue a cookie to be sent with the next response. It accepts various parameters that can be used to create a new cookie instance or an already created Symfony\Component\HttpFoundation\Cookie
instance.
expire
This method is used to queue a cookie to expire with the next response. It takes in the name of the cookie, and optionally, the path and domain.
unqueue
This method is used to remove a cookie from the queue. It takes in the name of the cookie, and optionally, the path.
setDefaultPathAndDomain
This method is used to set the default path, domain, secure, and sameSite options for the cookie jar. It allows for setting these options all at once. It returns the instance of the cookie jar.
getQueuedCookies
This method is used to retrieve all the cookies that have been queued for the next request. It returns an array of Symfony\Component\HttpFoundation\Cookie
instances representing the queued cookies.
flushQueuedCookies
This method is used to flush (clear) all the cookies that have been queued for the next request. It returns the instance of the cookie jar.
Classes
There are no additional classes defined in this file.
<?php
namespace Illuminate\Cookie;
use Illuminate\Contracts\Cookie\QueueingFactory as JarContract;
use Illuminate\Support\Arr;
use Illuminate\Support\InteractsWithTime;
use Illuminate\Support\Traits\Macroable;
use Symfony\Component\HttpFoundation\Cookie;
class CookieJar implements JarContract
{
use InteractsWithTime, Macroable;
/**
* The default path (if specified).
*
* @var string
*/
protected $path = '/';
/**
* The default domain (if specified).
*
* @var string|null
*/
protected $domain;
/**
* The default secure setting (defaults to null).
*
* @var bool|null
*/
protected $secure;
/**
* The default SameSite option (defaults to lax).
*
* @var string
*/
protected $sameSite = 'lax';
/**
* All of the cookies queued for sending.
*
* @var \Symfony\Component\HttpFoundation\Cookie[]
*/
protected $queued = [];
/**
* Create a new cookie instance.
*
* @param string $name
* @param string $value
* @param int $minutes
* @param string|null $path
* @param string|null $domain
* @param bool|null $secure
* @param bool $httpOnly
* @param bool $raw
* @param string|null $sameSite
* @return \Symfony\Component\HttpFoundation\Cookie
*/
public function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)
{
[$path, $domain, $secure, $sameSite] = $this->getPathAndDomain($path, $domain, $secure, $sameSite);
$time = ($minutes == 0) ? 0 : $this->availableAt($minutes * 60);
return new Cookie($name, $value, $time, $path, $domain, $secure, $httpOnly, $raw, $sameSite);
}
/**
* Create a cookie that lasts "forever" (400 days).
*
* @param string $name
* @param string $value
* @param string|null $path
* @param string|null $domain
* @param bool|null $secure
* @param bool $httpOnly
* @param bool $raw
* @param string|null $sameSite
* @return \Symfony\Component\HttpFoundation\Cookie
*/
public function forever($name, $value, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)
{
return $this->make($name, $value, 576000, $path, $domain, $secure, $httpOnly, $raw, $sameSite);
}
/**
* Expire the given cookie.
*
* @param string $name
* @param string|null $path
* @param string|null $domain
* @return \Symfony\Component\HttpFoundation\Cookie
*/
public function forget($name, $path = null, $domain = null)
{
return $this->make($name, null, -2628000, $path, $domain);
}
/**
* Determine if a cookie has been queued.
*
* @param string $key
* @param string|null $path
* @return bool
*/
public function hasQueued($key, $path = null)
{
return ! is_null($this->queued($key, null, $path));
}
/**
* Get a queued cookie instance.
*
* @param string $key
* @param mixed $default
* @param string|null $path
* @return \Symfony\Component\HttpFoundation\Cookie|null
*/
public function queued($key, $default = null, $path = null)
{
$queued = Arr::get($this->queued, $key, $default);
if ($path === null) {
return Arr::last($queued, null, $default);
}
return Arr::get($queued, $path, $default);
}
/**
* Queue a cookie to send with the next response.
*
* @param mixed ...$parameters
* @return void
*/
public function queue(...$parameters)
{
if (isset($parameters[0]) && $parameters[0] instanceof Cookie) {
$cookie = $parameters[0];
} else {
$cookie = $this->make(...array_values($parameters));
}
if (! isset($this->queued[$cookie->getName()])) {
$this->queued[$cookie->getName()] = [];
}
$this->queued[$cookie->getName()][$cookie->getPath()] = $cookie;
}
/**
* Queue a cookie to expire with the next response.
*
* @param string $name
* @param string|null $path
* @param string|null $domain
* @return void
*/
public function expire($name, $path = null, $domain = null)
{
$this->queue($this->forget($name, $path, $domain));
}
/**
* Remove a cookie from the queue.
*
* @param string $name
* @param string|null $path
* @return void
*/
public function unqueue($name, $path = null)
{
if ($path === null) {
unset($this->queued[$name]);
return;
}
unset($this->queued[$name][$path]);
if (empty($this->queued[$name])) {
unset($this->queued[$name]);
}
}
/**
* Get the path and domain, or the default values.
*
* @param string $path
* @param string|null $domain
* @param bool|null $secure
* @param string|null $sameSite
* @return array
*/
protected function getPathAndDomain($path, $domain, $secure = null, $sameSite = null)
{
return [$path ?: $this->path, $domain ?: $this->domain, is_bool($secure) ? $secure : $this->secure, $sameSite ?: $this->sameSite];
}
/**
* Set the default path and domain for the jar.
*
* @param string $path
* @param string|null $domain
* @param bool|null $secure
* @param string|null $sameSite
* @return $this
*/
public function setDefaultPathAndDomain($path, $domain, $secure = false, $sameSite = null)
{
[$this->path, $this->domain, $this->secure, $this->sameSite] = [$path, $domain, $secure, $sameSite];
return $this;
}
/**
* Get the cookies which have been queued for the next request.
*
* @return \Symfony\Component\HttpFoundation\Cookie[]
*/
public function getQueuedCookies()
{
return Arr::flatten($this->queued);
}
/**
* Flush the cookies which have been queued for the next request.
*
* @return $this
*/
public function flushQueuedCookies()
{
$this->queued = [];
return $this;
}
}