Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

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

SetCookie.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 8.96 KiB


001  <?php
002  namespace GuzzleHttp\Cookie;
003   
004  use GuzzleHttp\ToArrayInterface;
005   
006  /**
007   * Set-Cookie object
008   */
009  class SetCookie implements ToArrayInterface
010  {
011      /** @var array */
012      private static $defaults = [
013          'Name'     => null,
014          'Value'    => null,
015          'Domain'   => null,
016          'Path'     => '/',
017          'Max-Age'  => null,
018          'Expires'  => null,
019          'Secure'   => false,
020          'Discard'  => false,
021          'HttpOnly' => false
022      ];
023   
024      /** @var array Cookie data */
025      private $data;
026   
027      /**
028       * Create a new SetCookie object from a string
029       *
030       * @param string $cookie Set-Cookie header string
031       *
032       * @return self
033       */
034      public static function fromString($cookie)
035      {
036          // Create the default return array
037          $data = self::$defaults;
038          // Explode the cookie string using a series of semicolons
039          $pieces = array_filter(array_map('trim', explode(';', $cookie)));
040          // The name of the cookie (first kvp) must include an equal sign.
041          if (empty($pieces) || !strpos($pieces[0], '=')) {
042              return new self($data);
043          }
044   
045          // Add the cookie pieces into the parsed data array
046          foreach ($pieces as $part) {
047   
048              $cookieParts = explode('=', $part, 2);
049              $key = trim($cookieParts[0]);
050              $value = isset($cookieParts[1])
051                  ? trim($cookieParts[1], " \n\r\t\0\x0B\"")
052                  : true;
053   
054              // Only check for non-cookies when cookies have been found
055              if (empty($data['Name'])) {
056                  $data['Name'] = $key;
057                  $data['Value'] = $value;
058              } else {
059                  foreach (array_keys(self::$defaults) as $search) {
060                      if (!strcasecmp($search, $key)) {
061                          $data[$search] = $value;
062                          continue 2;
063                      }
064                  }
065                  $data[$key] = $value;
066              }
067          }
068   
069          return new self($data);
070      }
071   
072      /**
073       * @param array $data Array of cookie data provided by a Cookie parser
074       */
075      public function __construct(array $data = [])
076      {
077          $this->data = array_replace(self::$defaults, $data);
078          // Extract the Expires value and turn it into a UNIX timestamp if needed
079          if (!$this->getExpires() && $this->getMaxAge()) {
080              // Calculate the Expires date
081              $this->setExpires(time() + $this->getMaxAge());
082          } elseif ($this->getExpires() && !is_numeric($this->getExpires())) {
083              $this->setExpires($this->getExpires());
084          }
085      }
086   
087      public function __toString()
088      {
089          $str = $this->data['Name'] . '=' . $this->data['Value'] . '; ';
090          foreach ($this->data as $k => $v) {
091              if ($k != 'Name' && $k != 'Value' && $v !== null && $v !== false) {
092                  if ($k == 'Expires') {
093                      $str .= 'Expires=' . gmdate('D, d M Y H:i:s \G\M\T', $v) . '; ';
094                  } else {
095                      $str .= ($v === true ? $k : "{$k}={$v}") . '; ';
096                  }
097              }
098          }
099   
100          return rtrim($str, '; ');
101      }
102   
103      public function toArray()
104      {
105          return $this->data;
106      }
107   
108      /**
109       * Get the cookie name
110       *
111       * @return string
112       */
113      public function getName()
114      {
115          return $this->data['Name'];
116      }
117   
118      /**
119       * Set the cookie name
120       *
121       * @param string $name Cookie name
122       */
123      public function setName($name)
124      {
125          $this->data['Name'] = $name;
126      }
127   
128      /**
129       * Get the cookie value
130       *
131       * @return string
132       */
133      public function getValue()
134      {
135          return $this->data['Value'];
136      }
137   
138      /**
139       * Set the cookie value
140       *
141       * @param string $value Cookie value
142       */
143      public function setValue($value)
144      {
145          $this->data['Value'] = $value;
146      }
147   
148      /**
149       * Get the domain
150       *
151       * @return string|null
152       */
153      public function getDomain()
154      {
155          return $this->data['Domain'];
156      }
157   
158      /**
159       * Set the domain of the cookie
160       *
161       * @param string $domain
162       */
163      public function setDomain($domain)
164      {
165          $this->data['Domain'] = $domain;
166      }
167   
168      /**
169       * Get the path
170       *
171       * @return string
172       */
173      public function getPath()
174      {
175          return $this->data['Path'];
176      }
177   
178      /**
179       * Set the path of the cookie
180       *
181       * @param string $path Path of the cookie
182       */
183      public function setPath($path)
184      {
185          $this->data['Path'] = $path;
186      }
187   
188      /**
189       * Maximum lifetime of the cookie in seconds
190       *
191       * @return int|null
192       */
193      public function getMaxAge()
194      {
195          return $this->data['Max-Age'];
196      }
197   
198      /**
199       * Set the max-age of the cookie
200       *
201       * @param int $maxAge Max age of the cookie in seconds
202       */
203      public function setMaxAge($maxAge)
204      {
205          $this->data['Max-Age'] = $maxAge;
206      }
207   
208      /**
209       * The UNIX timestamp when the cookie Expires
210       *
211       * @return mixed
212       */
213      public function getExpires()
214      {
215          return $this->data['Expires'];
216      }
217   
218      /**
219       * Set the unix timestamp for which the cookie will expire
220       *
221       * @param int $timestamp Unix timestamp
222       */
223      public function setExpires($timestamp)
224      {
225          $this->data['Expires'] = is_numeric($timestamp)
226              ? (int) $timestamp
227              : strtotime($timestamp);
228      }
229   
230      /**
231       * Get whether or not this is a secure cookie
232       *
233       * @return null|bool
234       */
235      public function getSecure()
236      {
237          return $this->data['Secure'];
238      }
239   
240      /**
241       * Set whether or not the cookie is secure
242       *
243       * @param bool $secure Set to true or false if secure
244       */
245      public function setSecure($secure)
246      {
247          $this->data['Secure'] = $secure;
248      }
249   
250      /**
251       * Get whether or not this is a session cookie
252       *
253       * @return null|bool
254       */
255      public function getDiscard()
256      {
257          return $this->data['Discard'];
258      }
259   
260      /**
261       * Set whether or not this is a session cookie
262       *
263       * @param bool $discard Set to true or false if this is a session cookie
264       */
265      public function setDiscard($discard)
266      {
267          $this->data['Discard'] = $discard;
268      }
269   
270      /**
271       * Get whether or not this is an HTTP only cookie
272       *
273       * @return bool
274       */
275      public function getHttpOnly()
276      {
277          return $this->data['HttpOnly'];
278      }
279   
280      /**
281       * Set whether or not this is an HTTP only cookie
282       *
283       * @param bool $httpOnly Set to true or false if this is HTTP only
284       */
285      public function setHttpOnly($httpOnly)
286      {
287          $this->data['HttpOnly'] = $httpOnly;
288      }
289   
290      /**
291       * Check if the cookie matches a path value
292       *
293       * @param string $path Path to check against
294       *
295       * @return bool
296       */
297      public function matchesPath($path)
298      {
299          return !$this->getPath() || 0 === stripos($path, $this->getPath());
300      }
301   
302      /**
303       * Check if the cookie matches a domain value
304       *
305       * @param string $domain Domain to check against
306       *
307       * @return bool
308       */
309      public function matchesDomain($domain)
310      {
311          // Remove the leading '.' as per spec in RFC 6265.
312          // http://tools.ietf.org/html/rfc6265#section-5.2.3
313          $cookieDomain = ltrim($this->getDomain(), '.');
314   
315          // Domain not set or exact match.
316          if (!$cookieDomain || !strcasecmp($domain, $cookieDomain)) {
317              return true;
318          }
319   
320          // Matching the subdomain according to RFC 6265.
321          // http://tools.ietf.org/html/rfc6265#section-5.1.3
322          if (filter_var($domain, FILTER_VALIDATE_IP)) {
323              return false;
324          }
325   
326          return (bool) preg_match('/\.' . preg_quote($cookieDomain) . '$/i', $domain);
327      }
328   
329      /**
330       * Check if the cookie is expired
331       *
332       * @return bool
333       */
334      public function isExpired()
335      {
336          return $this->getExpires() && time() > $this->getExpires();
337      }
338   
339      /**
340       * Check if the cookie is valid according to RFC 6265
341       *
342       * @return bool|string Returns true if valid or an error message if invalid
343       */
344      public function validate()
345      {
346          // Names must not be empty, but can be 0
347          $name = $this->getName();
348          if (empty($name) && !is_numeric($name)) {
349              return 'The cookie name must not be empty';
350          }
351   
352          // Check if any of the invalid characters are present in the cookie name
353          if (preg_match("/[=,; \t\r\n\013\014]/", $name)) {
354              return "Cookie name must not cannot invalid characters: =,; \\t\\r\\n\\013\\014";
355          }
356   
357          // Value must not be empty, but can be 0
358          $value = $this->getValue();
359          if (empty($value) && !is_numeric($value)) {
360              return 'The cookie value must not be empty';
361          }
362   
363          // Domains must not be empty, but can be 0
364          // A "0" is not a valid internet domain, but may be used as server name
365          // in a private network.
366          $domain = $this->getDomain();
367          if (empty($domain) && !is_numeric($domain)) {
368              return 'The cookie domain must not be empty';
369          }
370   
371          return true;
372      }
373  }
374