index/src/Http/Headers/CookieHeader.php

48 lines
1.2 KiB
PHP

<?php
// CookieHeader.php
// Created: 2022-02-14
// Updated: 2022-02-27
namespace Index\Http\Headers;
use Index\UrlEncoding;
use Index\Http\HttpHeader;
class CookieHeader {
private array $cookies;
public function __construct(array $cookies) {
$this->cookies = $cookies;
}
public function getCookies(): array {
return $this->cookies;
}
public function hasCookie(string $name): bool {
return isset($this->cookies[$name]);
}
public function getCookie(string $name, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed {
if(!isset($this->cookies[$name]))
return null;
return filter_var($this->cookies[$name] ?? null, $filter, $options);
}
public static function parse(HttpHeader $header): CookieHeader {
$cookies = [];
$lines = $header->getLines();
foreach($lines as $line) {
$parts = explode(';', $line);
foreach($parts as $part) {
$kvp = explode('=', $part, 2);
$cookies[rawurldecode($kvp[0])] = rawurldecode($kvp[1] ?? '');
}
}
return new CookieHeader($cookies);
}
}