| @copyright 2007-2026 (c) AVE.cms
| @link https://ave-cms.ru
| @version 3.3
*/
namespace App\Helpers;
defined("BASEPATH") || die ('Direct access to this location is not allowed.');
class Cookie
{
/**
* Установить Cookie
*
* Метод устанавливает cookie в браузере пользователя с заданными параметрами.
* Используется для хранения пользовательских данных на стороне клиента.
*
* @param string $key Ключ cookie
* @param mixed $value Значение cookie
* @param int $expire Время жизни cookie в секундах (по умолчанию 86400 - 24 часа)
* @param string $domain Домен, для которого будет установлен cookie (по умолчанию пустая строка)
* @param string $path Путь на сервере, для которого будет установлен cookie (по умолчанию '/')
* @param bool $secure Флаг secure (cookie будет передаваться только по HTTPS)
* @param bool $httpOnly Флаг httpOnly (cookie будет доступен только через HTTP, а не JavaScript)
* @param string $sameSite Политика SameSite: Lax, Strict или None
* @return bool Результат установки cookie
*
* @example
*
* Cookie::set('username', 'john_doe', 3600);
* // Установит cookie с именем 'username' и значением 'john_doe' на 1 час
*
*/
public static function set ($key, $value, $expire = 86400, $domain = '', $path = '/', $secure = false, $httpOnly = false, $sameSite = 'Lax')
{
$key = (string) $key;
$path = (string) $path;
$domain = (string) $domain;
$secure = (bool) $secure;
$httpOnly = (bool) $httpOnly;
$sameSite = self::sameSite($sameSite, $secure);
$expires = $expire > 0 ? time() + $expire : $expire;
return setcookie($key, $value, array(
'expires' => $expires,
'path' => $path,
'domain' => $domain,
'secure' => $secure,
'httponly' => $httpOnly,
'samesite' => $sameSite,
));
}
/**
* Проверить наличие Cookie по ключу
*
* Метод проверяет, существует ли cookie с указанным ключом в массиве $_COOKIE.
* Используется для проверки наличия пользовательских данных в браузере.
*
* @param string $key Ключ cookie для проверки
* @return bool TRUE если cookie существует, FALSE в противном случае
*
* @example
*
* if (Cookie::has('username')) {
* // Cookie 'username' существует
* }
*
*/
public static function has ($key)
{
return ! is_null(Arr::get($_COOKIE, $key));
}
/**
* Получить Cookie по ключу
*
* Метод возвращает значение cookie с указанным ключом из массива $_COOKIE.
* Если cookie не существует, возвращается значение по умолчанию.
* Используется для получения пользовательских данных, сохраненных в браузере.
*
* @param string $key Ключ cookie для получения значения
* @param mixed $default Значение по умолчанию, если cookie не найден
* @return mixed Значение cookie или значение по умолчанию
*
* @example
*
* $username = Cookie::get('username', 'guest');
* // Вернет значение cookie 'username' или 'guest', если cookie не существует
*
*/
public static function get ($key = null, $default = null)
{
return Arr::get($_COOKIE, $key, $default);
}
/**
* Удалить Cookie по ключу
*
* Метод удаляет cookie с указанным ключом из массива $_COOKIE.
* Используется для очистки пользовательских данных, сохраненных в браузере.
*
* @param string $key Ключ cookie для удаления
* @return void
*
* @example
*
* Cookie::delete('username');
* // Удалит cookie с именем 'username'
*
*/
public static function delete ($key, $path = '/', $domain = '', $secure = null, $sameSite = 'Lax')
{
$secure = $secure === null ? Request::isHttps() : (bool) $secure;
setcookie((string) $key, '', array(
'expires' => time() - 3600,
'path' => (string) $path,
'domain' => (string) $domain,
'secure' => $secure,
'httponly' => true,
'samesite' => self::sameSite($sameSite, $secure),
));
unset($_COOKIE[$key]);
}
protected static function sameSite($value, $secure)
{
$value = ucfirst(strtolower(trim((string) $value)));
if (!in_array($value, array('Lax', 'Strict', 'None'), true)) {
$value = 'Lax';
}
return $value === 'None' && !$secure ? 'Lax' : $value;
}
}