Если вы не возражаете ограничить форму браузерами с поддержкой cookie (исключая некоторых «браузеров», то есть ботов, я полагаю), вы можете сделать что-то вроде этого:
Страница формы загружается, она проверяет переменную сеанса с отметкой времени. Если ничего не найдено, он создает его и перенаправляет на ту же страницу, но с параметром GET, указывающим «action = start» или что-то в этом роде. Поэтому при второй загрузке, если вы видите $ _GET ['action'] == 'start', вы можете проверить эту переменную сеанса. Если вы его не найдете, вы можете перенаправить его в другое место, сказав, что файлы cookie необходимы.
Теперь вы можете проверить отметку времени и сделать что-нибудь еще, если это было слишком рано.
Этот метод, по крайней мере, разрешит один и тот же IP-адрес, поскольку, если вы работаете с большой группой людей за брандмауэром, вам не нужно блокировать всю группу.