- Принимает базовые настройки для установки куков (domain, path, secure, expires и т.д.)
- Без лишнего кода и очень легкий (9 Kb)
- Совместим с PSR-15, PSR-7
- В комплекте PSR-15 Middleware
- Не имеет зависимостей, кроме PSR интерфейсов
- Доступна работа как с массивом (ArrayAccess)
- No private properties and methods
composer require symbiotic/http-cookie
Для более простой работы в пакете есть готовая PSR-15 Middleware, которая сама примет из запроса куки и отправит установленные в ответ:
\Symbiotic\Http\Cookie\CookiesMiddleware
$cookies = new \Symbiotic\Http\Cookie\Cookies();
// Установка дефолтных значений
$domain = 'example.com';
$path = '/';
$expires = time() + (3600 * 24 * 365);
$secure = true; // only https
// @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#attributes
$same_site = \Symbiotic\Http\Cookie\CookiesInterface::SAMESITE_LAX;
$cookies->setDefaults($domain, $path, $expires, $secure, $same_site);
/**
* Установка кук из запроса с ServerRequestInterface
*
* @var \Psr\Http\Message\ServerRequestInterface $request
* @var string[] $request_cookies ['name' => 'value',...]
**/
$request_cookies = $request->getCookieParams();
$cookies->setRequestCookies($request_cookies);
/**
* Или нативно
**/
$cookies->setRequestCookies($_COOKIE);
$cookies = new Symbiotic\Http\Cookie\Cookies();
/**
* Проверка наличия куки из запроса, кука с пустым значением тоже считается
*/
$cookies->has('cookie_name'); // return bool
/**
* Получение куки
* Если куки не существует вернет null
**/
$cookies->get('cookie_name'); // return string or null
/**
* Получение куки c дефолтным значением, если куки нет
**/
$cookies->get('cookie_name', 'default_value'); // return string
$cookies = new \Symbiotic\Http\Cookie\Cookies();
/**
* Короткий способ добавления куки, остальные параметры берутся из дефолтных значений , установленных в методе
* @see \Symbiotic\Http\Cookie\Cookies::setDefaults()
*/
$cookies->set('cookie_name', 'cookie value');
/**
* Расширенный способ, позволяет передать любые параметры,
* если передавать null в некоторые параметры, то будут браться из установленных по умолчанию
*/
$domain = 'www.example.com';
$path = '/docs';
$expires = time()+300; // метка времени на 5 минут вперед
$secure = false; // only https
$http_only = true; // only http request access
$options = ['samesite' => \Symbiotic\Http\Cookie\CookiesInterface::SAMESITE_STRICT]; // advanced params
$cookies->setCookie('cookie_name', 'cookie value', $expires, $http_only, $path, $domain, $secure, $options);
$cookies = new \Symbiotic\Http\Cookie\Cookies();
/**
* Короткий способ удаления куки, остальные параметры берутся из дефолтных значений , установленных в методе
* @see \Symbiotic\Http\Cookie\Cookies::setDefaults()
*/
$cookies->remove('cookie_name');
/**
* Удаление сразу нескольких кук
*/
$delete_cookies = [
'name1',
'name2',
'name3'
];
$cookies->remove($delete_cookies);
/**
* Расширенный способ, позволяет передать любые параметры,
* если передавать null в некоторые параметры, то будут браться из установленных по умолчанию
*/
$domain = 'www.example.com';
$path = '/docs';
$expires = time()-(60*60*48); // устаревшая метка времени
$cookies->setCookie('cookie_name', '', $expires, null, $path, $domain);
Для более удобного доступа к данным и простой установки кук Класс имплементирует интерфейс \ArrayAccess
$cookies = new \Symbiotic\Http\Cookie\Cookies();
/**
* Получение куки из запроса
* @see \Symbiotic\Http\Cookie\Cookies::get($key)
*/
$cookies['cookie_name']; // string or null
/**
* Установка куки
* (домен и остальные параметры берутся из дефолтных)
* @see \Symbiotic\Http\Cookie\Cookies::set($key, $value)
*/
$cookies['new_cookie'] = 'value';
/**
* Проверка сущесвования куки из запроса
* @see \Symbiotic\Http\Cookie\Cookies::has($key)
*/
$exists = isset($cookies['new_cookie']);
/**
* Удаление куки
* @see \Symbiotic\Http\Cookie\Cookies::remove($key)
*/
unset($cookies['cookie_name']);