Функция cot_importBufferKey в Cotonti
Функция cot_importBufferKey генерирует уникальный хеш (ключ) для текущего URI запроса, который можно использовать для идентификации данных в буфере сессии. Это полезно, например, для ассоциирования данных формы с конкретным запросом.
Код функции
function cot_importBufferKey($uri)
{
$parsedUri = parse_url($uri);
$path = trim($parsedUri['path'], '/');
$query = [];
if (!empty($parsedUri['query'])) {
parse_str($parsedUri['query'], $query);
}
$normalisedUri = $path;
if (!empty($query)) {
// Strip ajax param from the query
unset($query['_ajax']);
ksort($query);
$normalisedUri .= '?' . http_build_query($query);
}
return md5($normalisedUri);
}
Описание и разбор функции:
cot_importBufferKey($uri)
Логика работы:
Парсинг URI:
Функция сначала использует parse_url() для разбора переданного URI ($uri) на части, такие как путь и параметры запроса. Это нужно для нормализации URI и удаления лишних данных.
Получение пути:
$parsedUri['path'] — это путь, извлечённый из URI (например, /some/path).
Путь обрабатывается методом trim(), чтобы удалить любые лишние косые черты (/) в начале и в конце строки.
Обработка параметров запроса:
Если в URI есть параметры запроса, они извлекаются с помощью parse_str().
Параметры запроса сохраняются в массив $query.
Нормализация URI:
Путь ($path) добавляется в строку $normalisedUri.
Если параметры запроса существуют, из них удаляется параметр _ajax, если он присутствует (чтобы исключить влияние на хеш).
Параметры запроса сортируются по ключу с помощью ksort(), чтобы избежать влияния порядка параметров на итоговый хеш.
Параметры запроса добавляются в $normalisedUri в виде строки.
Генерация хеша:
Итоговая строка нормализованного URI передается в функцию md5(), которая возвращает хеш. Это хеш будет использоваться как уникальный ключ для хранения данных в буфере.
Примечания:
Идентификация запросов: Этот хеш помогает отслеживать уникальность запросов, несмотря на возможные изменения в параметрах запроса (например, в случае с AJAX-запросами).
Удаление параметра _ajax: Параметр _ajax удаляется, чтобы избежать его влияния на хеш, что полезно, если на один и тот же путь отправляются запросы как через AJAX, так и без.
Сортировка параметров: ksort() гарантирует, что параметры запроса всегда будут идти в одном и том же порядке при расчете хеша, что предотвращает различия в хешах из-за порядка параметров.
Пример использования этой функции:
$uri = 'https://example.com/some/path?param1=value1&_ajax=true¶m2=value2'; $bufferKey = cot_importBufferKey($uri); echo $bufferKey; // Уникальный хеш для данного URI
Потенциальные улучшения:
Проверка на корректность URI: Может быть полезно добавить дополнительные проверки на корректность переданного URI перед его парсингом.
Обработка фрагментов URI: В текущей реализации фрагменты (часть URI после #) игнорируются.
Если требуется учитывать фрагменты в хеше, можно добавить обработку $parsedUri['fragment'].
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-21 11:24
- Last update: 2025-01-21 11:24