summaryrefslogtreecommitdiff
path: root/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php')
-rw-r--r--vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php77
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');
+ }
+ }
+}