Я потратил более 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();