diff options
Diffstat (limited to 'vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php')
-rw-r--r-- | vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php new file mode 100644 index 000000000..cb3e67c6a --- /dev/null +++ b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php @@ -0,0 +1,77 @@ +<?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'); + } + } +} |