Проверка на повторное действие пользователем (отправка формы/заказа) за последний час/день

Данная проверка мне понадобилась для установки капчи на повторную отправку формы пользователем. Т.е. если кто-либо с одного 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;
	}

И далее просто обращаемся к ней, когда нужно узнать повторная ли это отправка данных пользователем.


Возврат к списку