Verzeichnisstruktur phpBB-3.3.16


Veröffentlicht
27.04.2026

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: 01.05.2026, 11:26 - 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