View file vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php

File size: 1.96Kb
  1. <?php
  2.  
  3. namespace GuzzleHttp\Cookie;
  4.  
  5. /**
  6. * Persists cookies in the client session
  7. */
  8. class SessionCookieJar extends CookieJar
  9. {
  10. /**
  11. * @var string session key
  12. */
  13. private $sessionKey;
  14.  
  15. /**
  16. * @var bool Control whether to persist session cookies or not.
  17. */
  18. private $storeSessionCookies;
  19.  
  20. /**
  21. * Create a new SessionCookieJar object
  22. *
  23. * @param string $sessionKey Session key name to store the cookie
  24. * data in session
  25. * @param bool $storeSessionCookies Set to true to store session cookies
  26. * in the cookie jar.
  27. */
  28. public function __construct(string $sessionKey, bool $storeSessionCookies = false)
  29. {
  30. parent::__construct();
  31. $this->sessionKey = $sessionKey;
  32. $this->storeSessionCookies = $storeSessionCookies;
  33. $this->load();
  34. }
  35.  
  36. /**
  37. * Saves cookies to session when shutting down
  38. */
  39. public function __destruct()
  40. {
  41. $this->save();
  42. }
  43.  
  44. /**
  45. * Save cookies to the client session
  46. */
  47. public function save(): void
  48. {
  49. $json = [];
  50. /** @var SetCookie $cookie */
  51. foreach ($this as $cookie) {
  52. if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
  53. $json[] = $cookie->toArray();
  54. }
  55. }
  56.  
  57. $_SESSION[$this->sessionKey] = \json_encode($json);
  58. }
  59.  
  60. /**
  61. * Load the contents of the client session into the data array
  62. */
  63. protected function load(): void
  64. {
  65. if (!isset($_SESSION[$this->sessionKey])) {
  66. return;
  67. }
  68. $data = \json_decode($_SESSION[$this->sessionKey], true);
  69. if (\is_array($data)) {
  70. foreach ($data as $cookie) {
  71. $this->setCookie(new SetCookie($cookie));
  72. }
  73. } elseif (\strlen($data)) {
  74. throw new \RuntimeException("Invalid cookie data");
  75. }
  76. }
  77. }