primo commit
This commit is contained in:
		
							
								
								
									
										467
									
								
								libraries/vendor/joomla/session/src/Storage/NativeStorage.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										467
									
								
								libraries/vendor/joomla/session/src/Storage/NativeStorage.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,467 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Part of the Joomla Framework Session Package | ||||
|  * | ||||
|  * @copyright  Copyright (C) 2005 - 2021 Open Source Matters, Inc. All rights reserved. | ||||
|  * @license    GNU General Public License version 2 or later; see LICENSE | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Session\Storage; | ||||
|  | ||||
| use Joomla\Session\HandlerInterface; | ||||
| use Joomla\Session\StorageInterface; | ||||
|  | ||||
| /** | ||||
|  * Base class providing a session store | ||||
|  * | ||||
|  * @since  2.0.0 | ||||
|  */ | ||||
| class NativeStorage implements StorageInterface | ||||
| { | ||||
|     /** | ||||
|      * Flag if the session is active | ||||
|      * | ||||
|      * @var    boolean | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $active = false; | ||||
|  | ||||
|     /** | ||||
|      * Internal flag identifying whether the session has been closed | ||||
|      * | ||||
|      * @var    boolean | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $closed = false; | ||||
|  | ||||
|     /** | ||||
|      * Session save handler | ||||
|      * | ||||
|      * @var    \SessionHandlerInterface | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $handler; | ||||
|  | ||||
|     /** | ||||
|      * Internal flag identifying whether the session has been started | ||||
|      * | ||||
|      * @var    boolean | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $started = false; | ||||
|  | ||||
|     /** | ||||
|      * Constructor | ||||
|      * | ||||
|      * @param   ?\SessionHandlerInterface  $handler  Session save handler | ||||
|      * @param   array                      $options  Session options | ||||
|      * | ||||
|      * @since   1.0 | ||||
|      */ | ||||
|     public function __construct(?\SessionHandlerInterface $handler = null, array $options = []) | ||||
|     { | ||||
|         // Disable transparent sid support and default use cookies | ||||
|         $options += [ | ||||
|             'use_cookies'   => 1, | ||||
|             'use_trans_sid' => 0, | ||||
|         ]; | ||||
|  | ||||
|         if (!headers_sent()) { | ||||
|             session_cache_limiter('none'); | ||||
|         } | ||||
|  | ||||
|         session_register_shutdown(); | ||||
|  | ||||
|         $this->setOptions($options); | ||||
|         $this->setHandler($handler); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Retrieves all variables from the session store | ||||
|      * | ||||
|      * @return  array | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function all(): array | ||||
|     { | ||||
|         return $_SESSION; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Clears all variables from the session store | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function clear(): void | ||||
|     { | ||||
|         $_SESSION = []; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Writes session data and ends session | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @see     session_write_close() | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function close(): void | ||||
|     { | ||||
|         session_write_close(); | ||||
|  | ||||
|         $this->closed  = true; | ||||
|         $this->started = false; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Perform session data garbage collection | ||||
|      * | ||||
|      * @return  integer|boolean  Number of deleted sessions on success or boolean false on failure or if the function is unsupported | ||||
|      * | ||||
|      * @see     session_gc() | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function gc() | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         return session_gc(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Aborts the current session | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @see     session_abort() | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function abort(): bool | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         return session_abort(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get data from the session store | ||||
|      * | ||||
|      * @param   string  $name     Name of a variable | ||||
|      * @param   mixed   $default  Default value of a variable if not set | ||||
|      * | ||||
|      * @return  mixed  Value of a variable | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function get(string $name, $default) | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         if (isset($_SESSION[$name])) { | ||||
|             return $_SESSION[$name]; | ||||
|         } | ||||
|  | ||||
|         return $default; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets the save handler instance | ||||
|      * | ||||
|      * @return  \SessionHandlerInterface|null | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function getHandler(): ?\SessionHandlerInterface | ||||
|     { | ||||
|         return $this->handler; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the session ID | ||||
|      * | ||||
|      * @return  string  The session ID | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function getId(): string | ||||
|     { | ||||
|         return session_id(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the session name | ||||
|      * | ||||
|      * @return  string  The session name | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function getName(): string | ||||
|     { | ||||
|         return session_name(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check whether data exists in the session store | ||||
|      * | ||||
|      * @param   string  $name  Name of variable | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function has(string $name): bool | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         return isset($_SESSION[$name]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check if the session is active | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function isActive(): bool | ||||
|     { | ||||
|         return $this->active = session_status() === \PHP_SESSION_ACTIVE; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check if the session is started | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function isStarted(): bool | ||||
|     { | ||||
|         return $this->started; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Unset a variable from the session store | ||||
|      * | ||||
|      * @param   string  $name  Name of variable | ||||
|      * | ||||
|      * @return  mixed  The value from session or NULL if not set | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function remove(string $name) | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         $old = $_SESSION[$name] ?? null; | ||||
|  | ||||
|         unset($_SESSION[$name]); | ||||
|  | ||||
|         return $old; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Regenerates the session ID that represents this storage. | ||||
|      * | ||||
|      * This method must invoke session_regenerate_id($destroy) unless this interface is used for a storage object designed for unit | ||||
|      * or functional testing where a real PHP session would interfere with testing. | ||||
|      * | ||||
|      * @param   boolean  $destroy  Destroy session when regenerating? | ||||
|      * | ||||
|      * @return  boolean  True on success | ||||
|      * | ||||
|      * @see     session_regenerate_id() | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function regenerate(bool $destroy = false): bool | ||||
|     { | ||||
|         if (headers_sent() || !$this->isActive()) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         return session_regenerate_id($destroy); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set data into the session store | ||||
|      * | ||||
|      * @param   string  $name   Name of a variable | ||||
|      * @param   mixed   $value  Value of a variable | ||||
|      * | ||||
|      * @return  mixed  Old value of a variable | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function set(string $name, $value = null) | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         $old = $_SESSION[$name] ?? null; | ||||
|  | ||||
|         $_SESSION[$name] = $value; | ||||
|  | ||||
|         return $old; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Registers session save handler as a PHP session handler | ||||
|      * | ||||
|      * @param   ?\SessionHandlerInterface  $handler  The save handler to use | ||||
|      * | ||||
|      * @return  $this | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      * @throws  \RuntimeException | ||||
|      */ | ||||
|     public function setHandler(?\SessionHandlerInterface $handler = null): self | ||||
|     { | ||||
|         // If the handler is an instance of our HandlerInterface, check whether it is supported | ||||
|         if ($handler instanceof HandlerInterface) { | ||||
|             if (!$handler::isSupported()) { | ||||
|                 throw new \RuntimeException( | ||||
|                     sprintf( | ||||
|                         'The "%s" handler is not supported in this environment.', | ||||
|                         \get_class($handler) | ||||
|                     ) | ||||
|                 ); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $this->handler = $handler; | ||||
|  | ||||
|         if (!headers_sent() && !$this->isActive()) { | ||||
|             session_set_save_handler($this->handler, false); | ||||
|         } | ||||
|  | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the session ID | ||||
|      * | ||||
|      * @param   string  $id  The session ID | ||||
|      * | ||||
|      * @return  $this | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      * @throws  \LogicException | ||||
|      */ | ||||
|     public function setId(string $id) | ||||
|     { | ||||
|         if ($this->isActive()) { | ||||
|             throw new \LogicException('Cannot change the ID of an active session'); | ||||
|         } | ||||
|  | ||||
|         session_id($id); | ||||
|  | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the session name | ||||
|      * | ||||
|      * @param   string  $name  The session name | ||||
|      * | ||||
|      * @return  $this | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      * @throws  \LogicException | ||||
|      */ | ||||
|     public function setName(string $name) | ||||
|     { | ||||
|         if ($this->isActive()) { | ||||
|             throw new \LogicException('Cannot change the name of an active session'); | ||||
|         } | ||||
|  | ||||
|         session_name($name); | ||||
|  | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Sets session.* ini variables. | ||||
|      * | ||||
|      * For convenience we omit 'session.' from the beginning of the keys. | ||||
|      * Explicitly ignores other ini keys. | ||||
|      * | ||||
|      * @param   array  $options  Session ini directives array(key => value). | ||||
|      * | ||||
|      * @return  $this | ||||
|      * | ||||
|      * @note    Based on \Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage::setOptions() | ||||
|      * @see     http://php.net/session.configuration | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function setOptions(array $options): self | ||||
|     { | ||||
|         if (headers_sent() || $this->isActive()) { | ||||
|             return $this; | ||||
|         } | ||||
|  | ||||
|         $validOptions = array_flip( | ||||
|             [ | ||||
|                 'cache_limiter', 'cache_expire', 'cookie_domain', 'cookie_httponly', 'cookie_lifetime', 'cookie_path', 'cookie_secure', 'gc_divisor', | ||||
|                 'gc_maxlifetime', 'gc_probability', 'lazy_write', 'name', 'referer_check', 'serialize_handler', 'use_strict_mode', 'use_cookies', | ||||
|                 'use_only_cookies', 'use_trans_sid', 'upload_progress.enabled', 'upload_progress.cleanup', 'upload_progress.prefix', | ||||
|                 'upload_progress.name', 'upload_progress.freq', 'upload_progress.min-freq', 'url_rewriter.tags', 'sid_length', | ||||
|                 'sid_bits_per_character', 'trans_sid_hosts', 'trans_sid_tags', | ||||
|             ] | ||||
|         ); | ||||
|  | ||||
|         foreach ($options as $key => $value) { | ||||
|             if (isset($validOptions[$key])) { | ||||
|                 ini_set('session.' . $key, $value); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Start a session | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function start(): void | ||||
|     { | ||||
|         if ($this->isStarted()) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if ($this->isActive()) { | ||||
|             throw new \RuntimeException('Failed to start the session: already started by PHP.'); | ||||
|         } | ||||
|  | ||||
|         if (ini_get('session.use_cookies') && headers_sent($file, $line)) { | ||||
|             throw new \RuntimeException( | ||||
|                 sprintf('Failed to start the session because headers have already been sent by "%s" at line %d.', $file, $line) | ||||
|             ); | ||||
|         } | ||||
|  | ||||
|         if (!session_start()) { | ||||
|             throw new \RuntimeException('Failed to start the session'); | ||||
|         } | ||||
|  | ||||
|         $this->isActive(); | ||||
|         $this->closed  = false; | ||||
|         $this->started = true; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										372
									
								
								libraries/vendor/joomla/session/src/Storage/RuntimeStorage.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										372
									
								
								libraries/vendor/joomla/session/src/Storage/RuntimeStorage.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,372 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @copyright  Copyright (C) 2005 - 2021 Open Source Matters, Inc. All rights reserved. | ||||
|  * @license    GNU General Public License version 2 or later; see LICENSE | ||||
|  */ | ||||
|  | ||||
| namespace Joomla\Session\Storage; | ||||
|  | ||||
| use Joomla\Session\StorageInterface; | ||||
|  | ||||
| /** | ||||
|  * Session storage object that stores objects in Runtime memory. This is designed for use in CLI Apps, including | ||||
|  * unit testing applications in PHPUnit. | ||||
|  * | ||||
|  * @since  2.0.0 | ||||
|  */ | ||||
| class RuntimeStorage implements StorageInterface | ||||
| { | ||||
|     /** | ||||
|      * Flag if the session is active | ||||
|      * | ||||
|      * @var    boolean | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $active = false; | ||||
|  | ||||
|     /** | ||||
|      * Internal flag identifying whether the session has been closed | ||||
|      * | ||||
|      * @var    boolean | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $closed = false; | ||||
|  | ||||
|     /** | ||||
|      * Internal data store | ||||
|      * | ||||
|      * @var    array | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $data = []; | ||||
|  | ||||
|     /** | ||||
|      * Session ID | ||||
|      * | ||||
|      * @var    string | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $id = ''; | ||||
|  | ||||
|     /** | ||||
|      * Session Name | ||||
|      * | ||||
|      * @var    string | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $name = 'MockSession'; | ||||
|  | ||||
|     /** | ||||
|      * Internal flag identifying whether the session has been started | ||||
|      * | ||||
|      * @var    boolean | ||||
|      * @since  2.0.0 | ||||
|      */ | ||||
|     private $started = false; | ||||
|  | ||||
|     /** | ||||
|      * Retrieves all variables from the session store | ||||
|      * | ||||
|      * @return  array | ||||
|      */ | ||||
|     public function all(): array | ||||
|     { | ||||
|         return $this->data; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Clears all variables from the session store | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function clear(): void | ||||
|     { | ||||
|         $this->data = []; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Writes session data and ends session | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @see     session_write_close() | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function close(): void | ||||
|     { | ||||
|         $this->closed  = true; | ||||
|         $this->started = false; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Perform session data garbage collection | ||||
|      * | ||||
|      * @return  integer|boolean  Number of deleted sessions on success or boolean false on failure or if the function is unsupported | ||||
|      * | ||||
|      * @see     session_gc() | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function gc() | ||||
|     { | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Aborts the current session | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @see     session_abort() | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function abort(): bool | ||||
|     { | ||||
|         $this->closed  = true; | ||||
|         $this->started = false; | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Generates a session ID | ||||
|      * | ||||
|      * @return  string | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     private function generateId(): string | ||||
|     { | ||||
|         return hash('sha256', uniqid(mt_rand())); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get data from the session store | ||||
|      * | ||||
|      * @param   string  $name     Name of a variable | ||||
|      * @param   mixed   $default  Default value of a variable if not set | ||||
|      * | ||||
|      * @return  mixed  Value of a variable | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function get(string $name, $default) | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         if (isset($this->data[$name])) { | ||||
|             return $this->data[$name]; | ||||
|         } | ||||
|  | ||||
|         return $default; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the session ID | ||||
|      * | ||||
|      * @return  string  The session ID | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function getId(): string | ||||
|     { | ||||
|         return $this->id; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the session name | ||||
|      * | ||||
|      * @return  string  The session name | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function getName(): string | ||||
|     { | ||||
|         return $this->name; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check whether data exists in the session store | ||||
|      * | ||||
|      * @param   string  $name  Name of variable | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function has(string $name): bool | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         return isset($this->data[$name]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check if the session is active | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function isActive(): bool | ||||
|     { | ||||
|         return $this->active = $this->started; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check if the session is started | ||||
|      * | ||||
|      * @return  boolean | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function isStarted(): bool | ||||
|     { | ||||
|         return $this->started; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Unset a variable from the session store | ||||
|      * | ||||
|      * @param   string  $name  Name of variable | ||||
|      * | ||||
|      * @return  mixed  The value from session or NULL if not set | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function remove(string $name) | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         $old = $this->data[$name] ?? null; | ||||
|  | ||||
|         unset($this->data[$name]); | ||||
|  | ||||
|         return $old; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Regenerates the session ID that represents this storage. | ||||
|      * | ||||
|      * This method must invoke session_regenerate_id($destroy) unless this interface is used for a storage object designed for unit | ||||
|      * or functional testing where a real PHP session would interfere with testing. | ||||
|      * | ||||
|      * @param   boolean  $destroy  Destroy session when regenerating? | ||||
|      * | ||||
|      * @return  boolean  True on success | ||||
|      * | ||||
|      * @see     session_regenerate_id() | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function regenerate(bool $destroy = false): bool | ||||
|     { | ||||
|         if (!$this->isActive()) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         if ($destroy) { | ||||
|             $this->id = $this->generateId(); | ||||
|         } | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set data into the session store | ||||
|      * | ||||
|      * @param   string  $name   Name of a variable | ||||
|      * @param   mixed   $value  Value of a variable | ||||
|      * | ||||
|      * @return  mixed  Old value of a variable | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function set(string $name, $value = null) | ||||
|     { | ||||
|         if (!$this->isStarted()) { | ||||
|             $this->start(); | ||||
|         } | ||||
|  | ||||
|         $old = $this->data[$name] ?? null; | ||||
|  | ||||
|         $this->data[$name] = $value; | ||||
|  | ||||
|         return $old; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the session ID | ||||
|      * | ||||
|      * @param   string  $id  The session ID | ||||
|      * | ||||
|      * @return  $this | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      * @throws  \LogicException | ||||
|      */ | ||||
|     public function setId(string $id) | ||||
|     { | ||||
|         if ($this->isActive()) { | ||||
|             throw new \LogicException('Cannot change the ID of an active session'); | ||||
|         } | ||||
|  | ||||
|         $this->id = $id; | ||||
|  | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the session name | ||||
|      * | ||||
|      * @param   string  $name  The session name | ||||
|      * | ||||
|      * @return  $this | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      * @throws  \LogicException | ||||
|      */ | ||||
|     public function setName(string $name) | ||||
|     { | ||||
|         if ($this->isActive()) { | ||||
|             throw new \LogicException('Cannot change the name of an active session'); | ||||
|         } | ||||
|  | ||||
|         $this->name = $name; | ||||
|  | ||||
|         return $this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Start a session | ||||
|      * | ||||
|      * @return  void | ||||
|      * | ||||
|      * @since   2.0.0 | ||||
|      */ | ||||
|     public function start(): void | ||||
|     { | ||||
|         if ($this->isStarted()) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if ($this->isActive()) { | ||||
|             throw new \RuntimeException('Failed to start the session: already started by PHP.'); | ||||
|         } | ||||
|  | ||||
|         if (empty($this->id)) { | ||||
|             $this->setId($this->generateId()); | ||||
|         } | ||||
|  | ||||
|         $this->closed  = false; | ||||
|         $this->started = true; | ||||
|         $this->isActive(); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user