Данная проверка мне понадобилась для установки капчи на повторную отправку формы пользователем. Т.е. если кто-либо с одного IP адреса пытается более одного раза отправить одну и ту же форму, для него выводим капчу.
Как работает:
1) при успешном заполнение формы добавляем строку в лог событий следующим образом
\CEventLog::Log('INFO', 'НАЗВАНИЕ_НАШЕГО_СОБЫТИЯ', 'МОДУЛЬ', $_REQUEST['phone'], serialize($arEventFields));
Подробно тут останавливаться не буду, описание функции можно найти - тут
2) Затем пишем функцию (можно например в init.php или каком-нибудь своем модуле):
public static function needCaptcha()
{
GLOBAL $USER;
$result = false;
$maxTime = 60*30;
/* Проверка по последнему заказу с этого IP */
$rsEvent = \CEventLog::GetList(
['ID' => 'DESC'],
[
'SEVERITY' => 'INFO',
'AUDIT_TYPE_ID' => 'НАЗВАНИЕ_НАШЕГО_СОБЫТИЯ',
'MODULE_ID' => 'МОДУЛЬ',
'REMOTE_ADDR' => $_SERVER["REMOTE_ADDR"],
],
['nTopCount' => 1]
)->Fetch();
if(!empty($rsEvent['TIMESTAMP_X']))
{
$time = time()-strtotime($rsEvent['TIMESTAMP_X']);
if($time < $maxTime)
$result = true;
}
return $result;
}
И далее просто обращаемся к ней, когда нужно узнать повторная ли это отправка данных пользователем.