$cookies
$cookies : \GuzzleHttp\Cookie\SetCookie[]
Persists non-session cookies using a JSON formatted file
$cookies : \GuzzleHttp\Cookie\SetCookie[]
$strictMode : bool
$filename : string
$storeSessionCookies : bool
__construct(string $cookieFile, bool $storeSessionCookies = false) : mixed
Create a new FileCookieJar object
string | $cookieFile | File to store the cookie data |
bool | $storeSessionCookies | Set to true to store session cookies in the cookie jar. |
if the file cannot be found or created
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;
use GuzzleHttp\Utils;
/**
* Persists non-session cookies using a JSON formatted file
*/
class FileCookieJar extends CookieJar
{
/**
* @var string filename
*/
private $filename;
/**
* @var bool Control whether to persist session cookies or not.
*/
private $storeSessionCookies;
/**
* Create a new FileCookieJar object
*
* @param string $cookieFile File to store the cookie data
* @param bool $storeSessionCookies Set to true to store session cookies
* in the cookie jar.
*
* @throws \RuntimeException if the file cannot be found or created
*/
public function __construct(string $cookieFile, bool $storeSessionCookies = false)
{
parent::__construct();
$this->filename = $cookieFile;
$this->storeSessionCookies = $storeSessionCookies;
if (\file_exists($cookieFile)) {
$this->load($cookieFile);
}
}
/**
* Saves the file when shutting down
*/
public function __destruct()
{
$this->save($this->filename);
}
/**
* Saves the cookies to a file.
*
* @param string $filename File to save
*
* @throws \RuntimeException if the file cannot be found or created
*/
public function save(string $filename): void
{
$json = [];
/** @var SetCookie $cookie */
foreach ($this as $cookie) {
if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
$json[] = $cookie->toArray();
}
}
$jsonStr = Utils::jsonEncode($json);
if (false === \file_put_contents($filename, $jsonStr, \LOCK_EX)) {
throw new \RuntimeException("Unable to save file {$filename}");
}
}
/**
* Load cookies from a JSON formatted file.
*
* Old cookies are kept unless overwritten by newly loaded ones.
*
* @param string $filename Cookie file to load.
*
* @throws \RuntimeException if the file cannot be loaded.
*/
public function load(string $filename): void
{
$json = \file_get_contents($filename);
if (false === $json) {
throw new \RuntimeException("Unable to load file {$filename}");
}
if ($json === '') {
return;
}
$data = Utils::jsonDecode($json, true);
if (\is_array($data)) {
foreach ($data as $cookie) {
$this->setCookie(new SetCookie($cookie));
}
} elseif (\is_scalar($data) && !empty($data)) {
throw new \RuntimeException("Invalid cookie file: {$filename}");
}
}
}