Я использую PHP для вывода формы с динамическими значениями ввода в зависимости от определенных критериев:
<?php
//when user lands on the login page, he is presented with a form.
//if he logged in with the incorrect password, the variable $attempts will increment by 1.
$failed_attempt = $attempts > 10 ? 'failed' : '' ;
echo '
<form id="form_login">
<input type="hidden" name="failed_attempt" id="failed_attempt" value="'.$failed_attempt.'" />
<input type="hidden" name="current_time" id="current_time" value="'.date('Y-d-m H:i:s').'" />
<input type="text" name="uid" id="uid" placeholder="Username/e-mail">
<input type="password" name="pwd" id="pwd" placeholder="password">
<button type="submit" name="login_submit" id="login_submit">Login</button>
</form>';
echo '<p id="result"></p>';
?>
... и Ajax в форме отправляют, чтобы получать сообщения об ошибках и об успехе без обновления страницы:
$(document).ready(function(){
$('#login_submit').click(function(event) {
// document.location.reload(true);
event.preventDefault();
$.ajax({
url: "includes/login.inc.php",
//'<?php echo $form_action; ?>',
method: "post",
data: $('#form_login').serialize() + "&submit_login",
dataType: "text",
success: function (html, data) {
$('#result').html("Ajax Success Status:" + data + "<br>Result:" + html);
}
});
});
});
Однако, поскольку Ajax используется для отправки формы, страница никогда не обновляется, поэтому пользователь продолжает видеть одну и ту же форму, а ввод со значением $ failed_attempts остаетсяТо же самое, независимо от того, сколько раз пользователь нажимает «отправить» с неверным паролем.
У меня вопрос, как я могу «обновить» форму или только один ввод, прежде чем пользователь отправит форму?Если я откомментирую эту часть
// document.location.reload(true);
, то пользователь никогда не увидит сообщение об ошибке / успехе и не узнает, в чем дело.
Я пробовал по-другомуподходы, ни один не подходит (то есть я всегда сталкиваюсь с такими ситуациями, независимо от того, какой подход я выбрал). Когда я наконец-то получил не многословный, у меня все еще остается проблема с тем, что поле ввода остается тем же, если только пользовательпрактически обновляет страницу сам!).
PS Причина этого такова: я боюсь, что боты или DoS-злоумышленники смогут отправить форму несколько раз, и мне нужно остановить вход в систему, если она достигнет>10 попыток в течение х минут.