Функции cookies Albireo CMS
Функция 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(сессионная кука), то есть сообщения гарантированно исчезнут после закрытия браузера пользователем, даже если они не были прочитаны на сайте.
Функция 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 секунд), после чего кука автоматически удаляется браузером.