$cookies
$cookies : \GuzzleHttp\Cookie\SetCookie[]
Persists cookies in the client session
$cookies : \GuzzleHttp\Cookie\SetCookie[]
$strictMode : bool
$sessionKey : string
$storeSessionCookies : bool
__construct(string $sessionKey, bool $storeSessionCookies = false) : mixed
Create a new SessionCookieJar object
string | $sessionKey | Session key name to store the cookie data in session |
bool | $storeSessionCookies | Set to true to store session cookies in the cookie jar. |
shouldPersist(\GuzzleHttp\Cookie\SetCookie $cookie, bool $allowSessionCookies = false) : bool
Evaluate if this cookie should be persisted to storage that survives between requests.
\GuzzleHttp\Cookie\SetCookie | $cookie | Being evaluated. |
bool | $allowSessionCookies | If we should persist session cookies |
clear(?string $domain = null, ?string $path = null, ?string $name = null) : void
Remove cookies currently held in the cookie jar.
?string | $domain | Clears cookies matching a domain |
?string | $path | Clears cookies matching a domain and path |
?string | $name | Clears cookies matching a domain, path, and name |
extractCookies(\Psr\Http\Message\RequestInterface $request, \Psr\Http\Message\ResponseInterface $response) : void
Extract cookies from an HTTP response and store them in the CookieJar.
\Psr\Http\Message\RequestInterface | $request | Request that was sent |
\Psr\Http\Message\ResponseInterface | $response | Response that was received |
withCookieHeader(\Psr\Http\Message\RequestInterface $request) : \Psr\Http\Message\RequestInterface
Create a request with added cookie headers.
If no matching cookies are found in the cookie jar, then no Cookie header is added to the request and the same request is returned.
\Psr\Http\Message\RequestInterface | $request | Request object to modify. |
returns the modified request.
<?php
namespace GuzzleHttp\Cookie;
/**
* Persists cookies in the client session
*/
class SessionCookieJar extends CookieJar
{
/**
* @var string session key
*/
private $sessionKey;
/**
* @var bool Control whether to persist session cookies or not.
*/
private $storeSessionCookies;
/**
* Create a new SessionCookieJar object
*
* @param string $sessionKey Session key name to store the cookie
* data in session
* @param bool $storeSessionCookies Set to true to store session cookies
* in the cookie jar.
*/
public function __construct(string $sessionKey, bool $storeSessionCookies = false)
{
parent::__construct();
$this->sessionKey = $sessionKey;
$this->storeSessionCookies = $storeSessionCookies;
$this->load();
}
/**
* Saves cookies to session when shutting down
*/
public function __destruct()
{
$this->save();
}
/**
* Save cookies to the client session
*/
public function save(): void
{
$json = [];
/** @var SetCookie $cookie */
foreach ($this as $cookie) {
if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
$json[] = $cookie->toArray();
}
}
$_SESSION[$this->sessionKey] = \json_encode($json);
}
/**
* Load the contents of the client session into the data array
*/
protected function load(): void
{
if (!isset($_SESSION[$this->sessionKey])) {
return;
}
$data = \json_decode($_SESSION[$this->sessionKey], true);
if (\is_array($data)) {
foreach ($data as $cookie) {
$this->setCookie(new SetCookie($cookie));
}
} elseif (\strlen($data)) {
throw new \RuntimeException("Invalid cookie data");
}
}
}