Использование сеанса для ограничения подачи заявки по времени

Я потратил более 2 часов на чистку сети, пытаясь понять это. Я пытаюсь остановить передачу нескольких форм быстрее, чем 60 секунд. Вот что я использую.

session_start(); if (!isset($_SESSION['last_submit'])) $_SESSION['last_submit'] = time(); if (time()-$_SESSION['last_submit'] < 60) die('Post limit exceeded. Please wait at least 60 seconds'); else $_SESION['last_submit'] = time(); 

Я нашел этот бит здесь, на сайте, но не смог понять ничего лишнего, чтобы заставить его работать. У меня есть этот бит кода на моей странице в начале, который выполняет запрос БД с результатами POST предыдущих страниц. Нужно ли устанавливать значение $last_submit на определенное значение? Любая помощь приветствуется.

У вас две проблемы. Во-первых, при первом выполнении вы устанавливаете значение сеанса в time() , поэтому первая попытка всегда приводит к превышению предела. Вторая проблема заключается в том, что у вас есть опечатка в $_SESION .

Пытаться:

 session_start(); if (isset($_SESSION['last_submit']) && time()-$_SESSION['last_submit'] < 60) die('Post limit exceeded. Please wait at least 60 seconds'); else $_SESSION['last_submit'] = time(); 

Также следует отметить, что это не является надежным, поскольку пользователи могут отказаться от куки или удалить cookie сеанса, чтобы обойти ваш чек.

Последнее утверждение:

$_SESION['last_submit'] = time();

должно быть:

$_SESSION['last_submit'] = time();

Вы забыли …

Также этот кусок кода умрет, означая, что оператор die будет выполнен.

Альтернатива:

 if (time() - ( isset($_SESSION['last_submit'])?$_SESSION['last_submit']:0 )< 60) die('Post limit exceeded. Please wait at least 60 seconds'); // update the session $_SESSION['last_submit'] = time();