Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Session.php

Zuletzt modifiziert: 02.04.2025, 15:04 - Dateigröße: 5.10 KiB


001  <?php
002   
003  namespace OAuth\Common\Storage;
004   
005  use OAuth\Common\Storage\Exception\AuthorizationStateNotFoundException;
006  use OAuth\Common\Storage\Exception\TokenNotFoundException;
007  use OAuth\Common\Token\TokenInterface;
008   
009  /**
010   * Stores a token in a PHP session.
011   */
012  class Session implements TokenStorageInterface
013  {
014      /**
015       * @var bool
016       */
017      protected $startSession;
018   
019      /**
020       * @var string
021       */
022      protected $sessionVariableName;
023   
024      /**
025       * @var string
026       */
027      protected $stateVariableName;
028   
029      /**
030       * @param bool $startSession whether or not to start the session upon construction
031       * @param string $sessionVariableName the variable name to use within the _SESSION superglobal
032       * @param string $stateVariableName
033       */
034      public function __construct(
035          $startSession = true,
036          $sessionVariableName = 'lusitanian-oauth-token',
037          $stateVariableName = 'lusitanian-oauth-state'
038      ) {
039          if ($startSession && !$this->sessionHasStarted()) {
040              session_start();
041          }
042   
043          $this->startSession = $startSession;
044          $this->sessionVariableName = $sessionVariableName;
045          $this->stateVariableName = $stateVariableName;
046          if (!isset($_SESSION[$sessionVariableName])) {
047              $_SESSION[$sessionVariableName] = [];
048          }
049          if (!isset($_SESSION[$stateVariableName])) {
050              $_SESSION[$stateVariableName] = [];
051          }
052      }
053   
054      /**
055       * {@inheritdoc}
056       */
057      public function retrieveAccessToken($service)
058      {
059          if ($this->hasAccessToken($service)) {
060              return unserialize($_SESSION[$this->sessionVariableName][$service]);
061          }
062   
063          throw new TokenNotFoundException('Token not found in session, are you sure you stored it?');
064      }
065   
066      /**
067       * {@inheritdoc}
068       */
069      public function storeAccessToken($service, TokenInterface $token)
070      {
071          $serializedToken = serialize($token);
072   
073          if (isset($_SESSION[$this->sessionVariableName])
074              && is_array($_SESSION[$this->sessionVariableName])
075          ) {
076              $_SESSION[$this->sessionVariableName][$service] = $serializedToken;
077          } else {
078              $_SESSION[$this->sessionVariableName] = [
079                  $service => $serializedToken,
080              ];
081          }
082   
083          // allow chaining
084          return $this;
085      }
086   
087      /**
088       * {@inheritdoc}
089       */
090      public function hasAccessToken($service)
091      {
092          return isset($_SESSION[$this->sessionVariableName], $_SESSION[$this->sessionVariableName][$service]);
093      }
094   
095      /**
096       * {@inheritdoc}
097       */
098      public function clearToken($service)
099      {
100          if (array_key_exists($service, $_SESSION[$this->sessionVariableName])) {
101              unset($_SESSION[$this->sessionVariableName][$service]);
102          }
103   
104          // allow chaining
105          return $this;
106      }
107   
108      /**
109       * {@inheritdoc}
110       */
111      public function clearAllTokens()
112      {
113          unset($_SESSION[$this->sessionVariableName]);
114   
115          // allow chaining
116          return $this;
117      }
118   
119      /**
120       * {@inheritdoc}
121       */
122      public function storeAuthorizationState($service, $state)
123      {
124          if (isset($_SESSION[$this->stateVariableName])
125              && is_array($_SESSION[$this->stateVariableName])
126          ) {
127              $_SESSION[$this->stateVariableName][$service] = $state;
128          } else {
129              $_SESSION[$this->stateVariableName] = [
130                  $service => $state,
131              ];
132          }
133   
134          // allow chaining
135          return $this;
136      }
137   
138      /**
139       * {@inheritdoc}
140       */
141      public function hasAuthorizationState($service)
142      {
143          return isset($_SESSION[$this->stateVariableName], $_SESSION[$this->stateVariableName][$service]);
144      }
145   
146      /**
147       * {@inheritdoc}
148       */
149      public function retrieveAuthorizationState($service)
150      {
151          if ($this->hasAuthorizationState($service)) {
152              return $_SESSION[$this->stateVariableName][$service];
153          }
154   
155          throw new AuthorizationStateNotFoundException('State not found in session, are you sure you stored it?');
156      }
157   
158      /**
159       * {@inheritdoc}
160       */
161      public function clearAuthorizationState($service)
162      {
163          if (array_key_exists($service, $_SESSION[$this->stateVariableName])) {
164              unset($_SESSION[$this->stateVariableName][$service]);
165          }
166   
167          // allow chaining
168          return $this;
169      }
170   
171      /**
172       * {@inheritdoc}
173       */
174      public function clearAllAuthorizationStates()
175      {
176          unset($_SESSION[$this->stateVariableName]);
177   
178          // allow chaining
179          return $this;
180      }
181   
182      public function __destruct()
183      {
184          if ($this->startSession) {
185              session_write_close();
186          }
187      }
188   
189      /**
190       * Determine if the session has started.
191       *
192       * @url http://stackoverflow.com/a/18542272/1470961
193       *
194       * @return bool
195       */
196      protected function sessionHasStarted()
197      {
198          // For more modern PHP versions we use a more reliable method.
199          if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
200              return session_status() != PHP_SESSION_NONE;
201          }
202   
203          // Below PHP 5.4 we should test for the current session ID.
204          return session_id() !== '';
205      }
206  }
207