Функция cot_uriredir_store в Cotonti

Она предназначена для обеспечения удобного возврата пользователя на предыдущую страницу после выполнения определённых действий, например, авторизации.

Функция cot_uriredir_store сохраняет текущий URL (URI) в сессии для последующего перенаправления. Она предназначена для обеспечения удобного возврата пользователя на предыдущую страницу после выполнения определённых действий, например, авторизации.

Код функции:

function cot_uriredir_store()
{
    $m = cot_import('m', 'G', 'ALP'); // Импортируем параметр 'm' из GET-запроса с фильтром 'ALP' (латинские буквы и символы подчеркивания)
    
    if (
        $_SERVER['REQUEST_METHOD'] !== 'POST' // Если запрос не POST (т.е. это не отправка формы)
        && empty($_GET['x']) // Если нет параметра 'x' в GET (не команда, связанная с действиями формы)
        && !defined('COT_MESSAGE') // Если не отображается сообщение (обычно после выполнения действий)
        && !defined('COT_AUTH') // Если это не страница входа/выхода
        && (
            !defined('COT_USERS') // Если это не модуль пользователей
            || is_null($m) // Если параметр 'm' отсутствует
            || !in_array($m, ['register', 'passrecover']) // Если параметр 'm' не относится к действиям регистрации или восстановления пароля
        )
    ) {
        // Сохраняем текущий URI в сессии
        $_SESSION['s_uri_redir'] = Cot::$sys['uri_redir'];
    }
}


Объяснение:
Импорт параметра m:
 
$m = cot_import('m', 'G', 'ALP');

Импортируется параметр m из GET-запроса с фильтром 'ALP' (разрешены только латинские буквы, цифры и символ _).
Этот параметр часто используется в Cotonti для указания модуля или действия (например, register, passrecover).

Проверки условий:

Функция выполняет сохранение URI только при соблюдении следующих условий:

Запрос не является POST:
 
$_SERVER['REQUEST_METHOD'] !== 'POST'
Сохраняем URI только для GET-запросов.

Отсутствует параметр x в GET:
 
empty($_GET['x'])

Это означает, что запрос не связан с выполнением действия формы.

Не на странице сообщений (COT_MESSAGE):
 
!defined('COT_MESSAGE')

На страницах, где отображаются системные сообщения, URI не сохраняется.

Не на странице входа/выхода (COT_AUTH):
 
!defined('COT_AUTH')

Перенаправление на страницу входа/выхода не требует сохранения предыдущего URI.

Не связаны с регистрацией или восстановлением пароля:
 
!defined('COT_USERS') || is_null($m) || !in_array($m, ['register', 'passrecover'])

Если это модуль пользователей (COT_USERS), проверяется значение параметра m. Если m отсутствует или не относится к действиям регистрации/восстановления пароля, URI сохраняется.

Сохранение URI:
 
$_SESSION['s_uri_redir'] = Cot::$sys['uri_redir'];

Текущий URI сохраняется в сессии ($_SESSION['s_uri_redir']).
Переменная Cot::$sys['uri_redir'] содержит текущий URL с учётом всех параметров, без домена.

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

Сценарий:

Пользователь посещает страницу статьи, а затем его перенаправляют на страницу авторизации. После входа в систему его нужно вернуть обратно на страницу статьи.

Код:
Сохранение URI: Когда пользователь открывает страницу статьи:
 
cot_uriredir_store();

Перенаправление после авторизации: После успешного входа:
 
 

if (!empty($_SESSION['s_uri_redir'])) {
    $redirectUrl = $_SESSION['s_uri_redir'];
    unset($_SESSION['s_uri_redir']); // Удаляем из сессии после использования
    cot_redirect($redirectUrl);
} else {
    cot_redirect(cot_url('index'));
}


Итоги:
Функция cot_uriredir_store полезна для сохранения логики перенаправления на предыдущую страницу. Это особенно актуально для сценариев авторизации, где важно вернуть пользователя на ту страницу, с которой он начал взаимодействие.

2 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 23.01.2025 23:18
  • Последнее обновление: 23.01.2025 23:18