Session.php 4.1 KB

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