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

Cookie.php

Zuletzt modifiziert: 02.04.2025, 15:02 - Dateigröße: 8.33 KiB


001  <?php
002   
003  /*
004   * This file is part of the Symfony package.
005   *
006   * (c) Fabien Potencier <fabien@symfony.com>
007   *
008   * For the full copyright and license information, please view the LICENSE
009   * file that was distributed with this source code.
010   */
011   
012  namespace Symfony\Component\HttpFoundation;
013   
014  /**
015   * Represents a cookie.
016   *
017   * @author Johannes M. Schmitt <schmittjoh@gmail.com>
018   */
019  class Cookie
020  {
021      const SAMESITE_NONE = 'none';
022      const SAMESITE_LAX = 'lax';
023      const SAMESITE_STRICT = 'strict';
024   
025      protected $name;
026      protected $value;
027      protected $domain;
028      protected $expire;
029      protected $path;
030      protected $secure;
031      protected $httpOnly;
032   
033      private $raw;
034      private $sameSite;
035   
036      private static $reservedCharsList = "=,; \t\r\n\v\f";
037      private static $reservedCharsFrom = ['=', ',', ';', ' ', "\t", "\r", "\n", "\v", "\f"];
038      private static $reservedCharsTo = ['%3D', '%2C', '%3B', '%20', '%09', '%0D', '%0A', '%0B', '%0C'];
039   
040      /**
041       * Creates cookie from raw header string.
042       *
043       * @param string $cookie
044       * @param bool   $decode
045       *
046       * @return static
047       */
048      public static function fromString($cookie, $decode = false)
049      {
050          $data = [
051              'expires' => 0,
052              'path' => '/',
053              'domain' => null,
054              'secure' => false,
055              'httponly' => false,
056              'raw' => !$decode,
057              'samesite' => null,
058          ];
059          foreach (explode(';', $cookie) as $part) {
060              if (false === strpos($part, '=')) {
061                  $key = trim($part);
062                  $value = true;
063              } else {
064                  list($key, $value) = explode('=', trim($part), 2);
065                  $key = trim($key);
066                  $value = trim($value);
067              }
068              if (!isset($data['name'])) {
069                  $data['name'] = $decode ? urldecode($key) : $key;
070                  $data['value'] = true === $value ? null : ($decode ? urldecode($value) : $value);
071                  continue;
072              }
073              switch ($key = strtolower($key)) {
074                  case 'name':
075                  case 'value':
076                      break;
077                  case 'max-age':
078                      $data['expires'] = time() + (int) $value;
079                      break;
080                  default:
081                      $data[$key] = $value;
082                      break;
083              }
084          }
085   
086          return new static($data['name'], $data['value'], $data['expires'], $data['path'], $data['domain'], $data['secure'], $data['httponly'], $data['raw'], $data['samesite']);
087      }
088   
089      /**
090       * @param string                        $name     The name of the cookie
091       * @param string|null                   $value    The value of the cookie
092       * @param int|string|\DateTimeInterface $expire   The time the cookie expires
093       * @param string                        $path     The path on the server in which the cookie will be available on
094       * @param string|null                   $domain   The domain that the cookie is available to
095       * @param bool                          $secure   Whether the cookie should only be transmitted over a secure HTTPS connection from the client
096       * @param bool                          $httpOnly Whether the cookie will be made accessible only through the HTTP protocol
097       * @param bool                          $raw      Whether the cookie value should be sent with no url encoding
098       * @param string|null                   $sameSite Whether the cookie will be available for cross-site requests
099       *
100       * @throws \InvalidArgumentException
101       */
102      public function __construct($name, $value = null, $expire = 0, $path = '/', $domain = null, $secure = false, $httpOnly = true, $raw = false, $sameSite = null)
103      {
104          // from PHP source code
105          if ($raw && false !== strpbrk($name, self::$reservedCharsList)) {
106              throw new \InvalidArgumentException(sprintf('The cookie name "%s" contains invalid characters.', $name));
107          }
108   
109          if (empty($name)) {
110              throw new \InvalidArgumentException('The cookie name cannot be empty.');
111          }
112   
113          // convert expiration time to a Unix timestamp
114          if ($expire instanceof \DateTimeInterface) {
115              $expire = $expire->format('U');
116          } elseif (!is_numeric($expire)) {
117              $expire = strtotime($expire);
118   
119              if (false === $expire) {
120                  throw new \InvalidArgumentException('The cookie expiration time is not valid.');
121              }
122          }
123   
124          $this->name = $name;
125          $this->value = $value;
126          $this->domain = $domain;
127          $this->expire = 0 < $expire ? (int) $expire : 0;
128          $this->path = empty($path) ? '/' : $path;
129          $this->secure = (bool) $secure;
130          $this->httpOnly = (bool) $httpOnly;
131          $this->raw = (bool) $raw;
132   
133          if (null !== $sameSite) {
134              $sameSite = strtolower($sameSite);
135          }
136   
137          if (!\in_array($sameSite, [self::SAMESITE_LAX, self::SAMESITE_STRICT, self::SAMESITE_NONE, null], true)) {
138              throw new \InvalidArgumentException('The "sameSite" parameter value is not valid.');
139          }
140   
141          $this->sameSite = $sameSite;
142      }
143   
144      /**
145       * Returns the cookie as a string.
146       *
147       * @return string The cookie
148       */
149      public function __toString()
150      {
151          if ($this->isRaw()) {
152              $str = $this->getName();
153          } else {
154              $str = str_replace(self::$reservedCharsFrom, self::$reservedCharsTo, $this->getName());
155          }
156   
157          $str .= '=';
158   
159          if ('' === (string) $this->getValue()) {
160              $str .= 'deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; Max-Age=0';
161          } else {
162              $str .= $this->isRaw() ? $this->getValue() : rawurlencode($this->getValue());
163   
164              if (0 !== $this->getExpiresTime()) {
165                  $str .= '; expires='.gmdate('D, d-M-Y H:i:s T', $this->getExpiresTime()).'; Max-Age='.$this->getMaxAge();
166              }
167          }
168   
169          if ($this->getPath()) {
170              $str .= '; path='.$this->getPath();
171          }
172   
173          if ($this->getDomain()) {
174              $str .= '; domain='.$this->getDomain();
175          }
176   
177          if (true === $this->isSecure()) {
178              $str .= '; secure';
179          }
180   
181          if (true === $this->isHttpOnly()) {
182              $str .= '; httponly';
183          }
184   
185          if (null !== $this->getSameSite()) {
186              $str .= '; samesite='.$this->getSameSite();
187          }
188   
189          return $str;
190      }
191   
192      /**
193       * Gets the name of the cookie.
194       *
195       * @return string
196       */
197      public function getName()
198      {
199          return $this->name;
200      }
201   
202      /**
203       * Gets the value of the cookie.
204       *
205       * @return string|null
206       */
207      public function getValue()
208      {
209          return $this->value;
210      }
211   
212      /**
213       * Gets the domain that the cookie is available to.
214       *
215       * @return string|null
216       */
217      public function getDomain()
218      {
219          return $this->domain;
220      }
221   
222      /**
223       * Gets the time the cookie expires.
224       *
225       * @return int
226       */
227      public function getExpiresTime()
228      {
229          return $this->expire;
230      }
231   
232      /**
233       * Gets the max-age attribute.
234       *
235       * @return int
236       */
237      public function getMaxAge()
238      {
239          $maxAge = $this->expire - time();
240   
241          return 0 >= $maxAge ? 0 : $maxAge;
242      }
243   
244      /**
245       * Gets the path on the server in which the cookie will be available on.
246       *
247       * @return string
248       */
249      public function getPath()
250      {
251          return $this->path;
252      }
253   
254      /**
255       * Checks whether the cookie should only be transmitted over a secure HTTPS connection from the client.
256       *
257       * @return bool
258       */
259      public function isSecure()
260      {
261          return $this->secure;
262      }
263   
264      /**
265       * Checks whether the cookie will be made accessible only through the HTTP protocol.
266       *
267       * @return bool
268       */
269      public function isHttpOnly()
270      {
271          return $this->httpOnly;
272      }
273   
274      /**
275       * Whether this cookie is about to be cleared.
276       *
277       * @return bool
278       */
279      public function isCleared()
280      {
281          return 0 !== $this->expire && $this->expire < time();
282      }
283   
284      /**
285       * Checks if the cookie value should be sent with no url encoding.
286       *
287       * @return bool
288       */
289      public function isRaw()
290      {
291          return $this->raw;
292      }
293   
294      /**
295       * Gets the SameSite attribute.
296       *
297       * @return string|null
298       */
299      public function getSameSite()
300      {
301          return $this->sameSite;
302      }
303  }
304