ALBIREO CMS
version: 2026.06.01

Функции cookies Albireo CMS

cookieFlash cookieFlashGet cookieFlashSet cookieOld myDeleteCookie myGetCookie mySetCookie sentLastCookie

Функция cookieFlash

Функция для работы с мульти-flash сообщениями

Реализует механизм "всплывающих" (flash) сообщений, которые сохраняются в сеансовых куках браузера. Главная особенность подхода — хранение всех типов уведомлений в рамках одной единственной куки flash_msg, что экономит HTTP-заголовки. Данные сериализуются в JSON и обертываются в Base64 для безопасной передачи строк.

Сигнатуры

function cookieFlash(string $key, $val = null, bool $delete = true): mixed

function cookieFlashGet(string $key, bool $delete = true): mixed

function cookieFlashSet(string $key, $val): void

Аргументы

Для основной функции cookieFlash:

string $key
Ключ (тип) сообщения (например, 'success', 'error', 'info').
mixed $val
Значение сообщения. Если не передано или равно null, функция работает на чтение.
bool $delete
Флаг, указывающий, нужно ли удалять сообщение после его прочтения (по умолчанию true).

Результат

  • cookieFlash(): в режиме чтения возвращает сохраненные данные (тип mixed) или пустую строку '', если ключ не найден. В режиме записи возвращает записанное значение.
  • cookieFlashGet(): возвращает значение сообщения (тип mixed) или пустую строку ''.
  • cookieFlashSet(): не возвращает значений (void).

Примеры использования

// 1. Установка уведомлений в обработчике (контроллере)
cookieFlashSet('success', 'Регистрация прошла успешно!');
cookieFlashSet('system_info', ['last_login' => '2026-05-31']);

// 2. Вывод и автоматическое удаление в HTML-шаблоне
$successMsg = cookieFlashGet('success');
if ($successMsg !== '') {
    echo '<div class="alert alert-success">' . htmlspecialchars($successMsg) . '</div>';
}

// 3. Чтение БЕЗ удаления (например, для отладки или многократного использования на одной странице)
$systemInfo = cookieFlashGet('system_info', false);
print_r($systemInfo);

Примечания

  • Использование статической переменной static $flashData оптимизирует работу: чтение куки с диска, декодирование Base64 и парсинг JSON происходят ровно один раз за весь жизненный цикл запроса к серверу.
  • При удалении последнего оставшегося flash-сообщения кука flash_msg полностью уничтожается на стороне клиента с помощью myDeleteCookie().
  • Кука записывается со временем жизни 0 (сессионная кука), то есть сообщения гарантированно исчезнут после закрытия браузера пользователем, даже если они не были прочитаны на сайте.

Функция cookieFlashGet

См. cookieFlash()

Функция cookieFlashSet

См. cookieFlash()

Функция cookieOld

Функция служит для сохранения и последующего восстановления введенных пользователем данных (например, при повторном отображении формы после ошибки валидации).

Сигнатура

function cookieOld(string $key, $val = null): mixed

Аргументы

string $key
Идентификатор (ключ) куки, под которым будут сохранены или считаны данные.
mixed $val
Значение, которое необходимо сохранить. Если передано значение по умолчанию (null), функция переходит в режим чтения и пытается вернуть ранее сохраненные данные.

Результат

  • В режиме чтения ($val === null): возвращает строку со значением куки (тип string|bool), либо пустую строку '', если кука не найдена.
  • В режиме записи ($val !== null): производит запись куки и возвращает null (void).

Примеры использования

// 1. Запись данных в обработчике формы
$emailInput = $_POST['email'] ?? '';
cookieOld('form-email', $emailInput);

// 2. Чтение данных при выводе формы в HTML
$savedEmail = cookieOld('form-email');
echo '<input type="email" name="form[email]" value="' . htmlspecialchars($savedEmail) . '">';

Примечания

  • Функция является оберткой над функциями myGetCookie() и mySetCookie().

Функция myDeleteCookie

Функция предназначена для удаления ранее установленной куки по её простому имени.

Сигнатура

function myDeleteCookie(string $name): bool

Аргументы

string $name
Простое текстовое имя куки (например, 'user_login' или 'theme'), которую требуется удалить.

Результат

Возвращает логическое значение bool (true при успешной отправке HTTP-заголовка удаления куки или false при возникновении ошибки).

Примеры использования

// Пример удаления куки сессии при выходе пользователя из системы
if (myDeleteCookie('user_login')) {
    echo "Кука успешно удалена.";
} else {
    echo "Не удалось удалить куку.";
}

Примечания

  • Функция зависит от ранее объявленной функции mySetCookie() и использует тот же алгоритм именования для корректного поиска куки.

Функция myGetCookie

Функция предназначена для безопасного чтения кук (cookies) с автоматическим восстановлением защищенного имени, сгенерированного функцией mySetCookie().

Сигнатура

function myGetCookie(string $name, string|bool $default = ''): string|bool

Аргументы

string $name
Простое текстовое имя куки (например, 'user_login' или 'theme').
string|bool $default
Значение, которое будет возвращено в случае, если запрашиваемая кука не найдена в глобальном массиве $_COOKIE. По умолчанию возвращается пустая строка ''.

Результат

Возвращает строку (string) со значением куки в случае её успешного нахождения, либо переданное значение по умолчанию (типа string или bool).

Примеры использования

// Пример чтения логина пользователя
$login = myGetCookie('user_login');
if ($login !== '') {
    echo "Привет, " . htmlspecialchars($login);
}

// Пример чтения темы оформления со значением по умолчанию
$theme = myGetCookie('theme', 'light');
echo "Выбранная тема: " . htmlspecialchars($theme);

// Пример проверки существования авторизационной куки
$token = myGetCookie('auth_token', false);
if ($token === false) {
    echo "Токен отсутствует.";
}

Примечания

  • Функция должна использоваться совместно с функцией mySetCookie(), так как она использует идентичный алгоритм для генерации и поиска имени куки.

Функция mySetCookie

Функция предназначена для безопасной записи кук (cookies) с автоматической изоляцией имен в зависимости от текущего сайта и режима окружения.

Сигнатура

function mySetCookie(string $name, string $value, int $expire = 3600, bool $httpOnly = true): bool

Аргументы

string $name
Простое текстовое имя куки (например, 'user_login' или 'theme').
string $value
Строковое значение куки.
int $expire
Срок действия куки в секундах от текущего времени. По умолчанию составляет 3600 секунд (1 час). Если передано значение 0, кука будет удалена при закрытии сеанса браузера.
bool $httpOnly
Флаг безопасности. Если установлен в true (по умолчанию), кука будет недоступна для скриптов JavaScript, что существенно снижает риски кражи данных через XSS-атаки.

Результат

Возвращает логическое значение bool (true в случае успешной установки заголовка или false при возникновении ошибок).

Примеры использования

// Установка куки авторизации на 30 дней
mySetCookie('user_login', 'ivan', 3600 * 24 * 30);

// Установка куки настроек темы, доступной для JavaScript
mySetCookie('theme', 'dark', 3600 * 24 * 365, false);

// Установка временной сессионной куки (до закрытия браузера)
mySetCookie('temp_session_id', 'xyz123', 0);

Примечания

  • Для предотвращения конфликтов имен на общем хостинге или локальном сервере имя куки автоматически расширяется за счет добавления короткого MD5-хеша от SITE_URL.
  • В промышленном окружении (при LOCALHOST === false) к имени куки автоматически добавляется префикс __Host-. Это заставляет браузеры принимать её только по защищенному протоколу HTTPS и блокирует возможность переопределения путей.
  • Кука принудительно устанавливается с флагом samesite => 'Lax', что обеспечивает защиту от CSRF-атак.

Функция sentLastCookie

Функция реализует механизм защиты от флуда (отправки слишком большого количества запросов/форм за короткий промежуток времени) для неавторизованных посетителей сайта.

Сигнатура

function sentLastCookie($delay = 0): int

Аргументы

int|bool $delay
Параметр, определяющий поведение функции.
  • Если передано логическое true, функция переходит в режим записи и фиксирует текущее время отправки в зашифрованную куку.
  • Если передано число 0 (значение по умолчанию), проверяется стандартный интервал ожидания, получаемый из конфигурации через getConfig('sentDelay', 120).
  • Если передано целое число больше нуля (int > 0), данное значение используется в качестве кастомного интервала ожидания (в секундах).

Результат

Возвращает целое число (int), обозначающее количество секунд, которое пользователю осталось подождать до следующей отправки. Возвращает 0, если лимит времени исчерпан, пользователь авторизован или кука еще не создана (первая отправка).

Примеры использования

// Сценарий обработки POST-запроса формы обратной связи

// 1. Проверяем, не спамит ли пользователь
$left = sentLastCookie();

if ($left > 0) {
    echo "Ошибка: отправка сообщений ограничена. Подождите " . $left . " сек.";
    exit;
}

// 2. Логика обработки и отправки письма...
$mailSent = true; 

// 3. Если все прошло успешно — фиксируем время отправки
if ($mailSent) {
    sentLastCookie(true);
    echo "Сообщение успешно отправлено!";
}

Примечания

  • Временная метка сохраняется в куку в зашифрованном виде, что исключает возможность обхода задержки путем ручного редактирования значения куки в браузере.
  • Для авторизованных пользователей (проверяется через getUser('login')) лимиты не применяются, и функция всегда возвращает 0.
  • Срок действия шифрованной метки в куках составляет 24 часа (86400 секунд), после чего кука автоматически удаляется браузером.