Session.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. /**
  3. * @package Grav\Common
  4. *
  5. * @copyright Copyright (c) 2015 - 2021 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common;
  9. use Grav\Common\Form\FormFlash;
  10. use Grav\Events\SessionStartEvent;
  11. use Grav\Plugin\Form\Forms;
  12. use function is_string;
  13. /**
  14. * Class Session
  15. * @package Grav\Common
  16. */
  17. class Session extends \Grav\Framework\Session\Session
  18. {
  19. /** @var bool */
  20. protected $autoStart = false;
  21. /**
  22. * @return \Grav\Framework\Session\Session
  23. * @deprecated 1.5 Use ->getInstance() method instead.
  24. */
  25. public static function instance()
  26. {
  27. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.5, use ->getInstance() method instead', E_USER_DEPRECATED);
  28. return static::getInstance();
  29. }
  30. /**
  31. * Initialize session.
  32. *
  33. * Code in this function has been moved into SessionServiceProvider class.
  34. *
  35. * @return void
  36. */
  37. public function init()
  38. {
  39. if ($this->autoStart && !$this->isStarted()) {
  40. $this->start();
  41. $this->autoStart = false;
  42. }
  43. }
  44. /**
  45. * @param bool $auto
  46. * @return $this
  47. */
  48. public function setAutoStart($auto)
  49. {
  50. $this->autoStart = (bool)$auto;
  51. return $this;
  52. }
  53. /**
  54. * Returns attributes.
  55. *
  56. * @return array Attributes
  57. * @deprecated 1.5 Use ->getAll() method instead.
  58. */
  59. public function all()
  60. {
  61. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.5, use ->getAll() method instead', E_USER_DEPRECATED);
  62. return $this->getAll();
  63. }
  64. /**
  65. * Checks if the session was started.
  66. *
  67. * @return bool
  68. * @deprecated 1.5 Use ->isStarted() method instead.
  69. */
  70. public function started()
  71. {
  72. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.5, use ->isStarted() method instead', E_USER_DEPRECATED);
  73. return $this->isStarted();
  74. }
  75. /**
  76. * Store something in session temporarily.
  77. *
  78. * @param string $name
  79. * @param mixed $object
  80. * @return $this
  81. */
  82. public function setFlashObject($name, $object)
  83. {
  84. $this->__set($name, serialize($object));
  85. return $this;
  86. }
  87. /**
  88. * Return object and remove it from session.
  89. *
  90. * @param string $name
  91. * @return mixed
  92. */
  93. public function getFlashObject($name)
  94. {
  95. $serialized = $this->__get($name);
  96. $object = is_string($serialized) ? unserialize($serialized, ['allowed_classes' => true]) : $serialized;
  97. $this->__unset($name);
  98. if ($name === 'files-upload') {
  99. $grav = Grav::instance();
  100. // Make sure that Forms 3.0+ has been installed.
  101. if (null === $object && isset($grav['forms'])) {
  102. user_error(
  103. __CLASS__ . '::' . __FUNCTION__ . '(\'files-upload\') is deprecated since Grav 1.6, use $form->getFlash()->getLegacyFiles() instead',
  104. E_USER_DEPRECATED
  105. );
  106. /** @var Uri $uri */
  107. $uri = $grav['uri'];
  108. /** @var Forms|null $form */
  109. $form = $grav['forms']->getActiveForm(); // @phpstan-ignore-line
  110. $sessionField = base64_encode($uri->url);
  111. /** @var FormFlash|null $flash */
  112. $flash = $form ? $form->getFlash() : null; // @phpstan-ignore-line
  113. $object = $flash && method_exists($flash, 'getLegacyFiles') ? [$sessionField => $flash->getLegacyFiles()] : null;
  114. }
  115. }
  116. return $object;
  117. }
  118. /**
  119. * Store something in cookie temporarily.
  120. *
  121. * @param string $name
  122. * @param mixed $object
  123. * @param int $time
  124. * @return $this
  125. */
  126. public function setFlashCookieObject($name, $object, $time = 60)
  127. {
  128. setcookie($name, json_encode($object), time() + $time, '/');
  129. return $this;
  130. }
  131. /**
  132. * Return object and remove it from the cookie.
  133. *
  134. * @param string $name
  135. * @return mixed|null
  136. */
  137. public function getFlashCookieObject($name)
  138. {
  139. if (isset($_COOKIE[$name])) {
  140. $object = json_decode($_COOKIE[$name], false);
  141. setcookie($name, '', time() - 3600, '/');
  142. return $object;
  143. }
  144. return null;
  145. }
  146. /**
  147. * @return void
  148. */
  149. protected function onSessionStart(): void
  150. {
  151. $event = new SessionStartEvent($this);
  152. $grav = Grav::instance();
  153. $grav->dispatchEvent($event);
  154. }
  155. }