Я не понимаю, что делать. Я хочу послать эхо, которое AJAX будет читать и реагировать на него. Но проблема в том, что скрипт php выполняется полностью до того, как он отобразится. Я попытался очистить и все другие методы, найденные на SOF, но он все еще не работал. Я думаю, это потому, что мой бесплатный хост-сервер 000webhost — у них может быть что-то, что конфликтует с функцией сна.
Есть ли способ отложить выполнение скрипта PHP, но до завершения отправить эхо клиенту (который предупреждает пользователя), и после этого скрипт будет выполняться, пока кнопка отправки отключена и отображается задержка?
Прошу прощения за мою новизну в AJAX, я недавно начал изучать это.
if ($failed_attempts_ip_user >= $first_throttle_limit) {
foreach ($throttle as $attempts => $delay) {
if ($failed_attempts_ip_user > $attempts) {
if (is_numeric($delay)) {
$next_login_minimum_time = $latest_attempt + $delay;
if (time() < $next_login_minimum_time) {
$remaining_delay = $next_login_minimum_time - time();
echo "You must wait " . $remaining_delay . " seconds before your next login attempt.";
sleep($remaining_delay);
} else {
return "safe to login";
}
} else {
if ($delay === "reCaptcha") {
echo 'reCaptcha';
} else {
//$max_attempt = array_search('temp_blocked', $throttle); // search key 'temp_blocked' for its index.
echo "Too many login attempts detected. Please wait " . $temp_block_attempts_limit . " minutes before your next attempt.";
}
}
break;
}
} // foreach close tag
echo "Email/username and/or password is incorrect.";
exit;
}
echo "user_password_does_not_match";
}
AJAX:
$(function ajaxLogin() {
$("#login_form").submit(function(e) {
e.preventDefault();
$("input[name='submit']").val("Processing...");
$("input[name='submit']").addClass("disableButton");
$("input[name='submit']").prop("disabled", true);
var receiveDataLogin = $.ajax({
dataType: "text",
type: "POST",
url: 'includes/login_script.php',
timeout: 5000,
data: $(this).serialize()
});
receiveDataLogin.done(function(data){
if(data.trim() == "empty_email_username_detected") {
alert("Please enter in your email address.");
} else if(data.trim() == "empty_password_detected") {
alert("Please enter in your password.");
} else if(data.trim() == "temp_block_detected") {
alert("Too many login attempts. Please try again in 15 minutes.");
} else if(data.trim() == "successfully_logged_in") {
$('.form_menu_wrapper').slideUp(200);
alert("You have signed in successfully!");
} else if(data.trim() == "Email/username and/or password is incorrect.") {
alert("Your email address/username and/or password is incorrect.");
} else if(data.trim() == "user_password_does_not_match") {
alert("Your email address/username and/or password is incorrect.");
} else if(data.trim() == "You must wait 1 seconds before your next login attempt.Email/username and/or password is incorrect.") {
alert("You must wait 1 second before your next login attempt.");
} else if(data.trim() == "You must wait 2 seconds before your next login attempt.Email/username and/or password is incorrect.") { alert("You must wait 2 seconds before your next login attempt.");
$("input[name='submit']").val("Sign in");
} else if(data.trim() == "You must wait 4 seconds before your next login attempt.Email/username and/or password is incorrect.") {
alert("You must wait 4 seconds before your next login attempt.");
} else if(data.trim() == "You must wait 8 seconds before your next login attempt.Email/username and/or password is incorrect.") {
alert("You must wait 8 seconds before your next login attempt.");
} else if(data.trim() == "You must wait 16 seconds before your next login attempt.Email/username and/or password is incorrect.") {
alert("You must wait 16 seconds before your next login attempt.");
} else if(data.trim() == "You must wait 20 seconds before your next login attempt.Email/username and/or password is incorrect.") {
alert("You must wait 20 seconds before your next login attempt.");
} else if(data.trim() == "reCaptchaEmail/username and/or password is incorrect.") {
alert("reCaptcha -- will add reCaptcha later");
} else if(data.trim() == "Too many login attempts detected. Please wait 15 minutes before your next attempt.Email/username and/or password is incorrect.") {
alert("Too many failed login attempts detected. Please wait 15 minutes before your next attempt.");
} else {
alert("Error. Please try again later.");
}
$("input[name='submit']").val("Sign in");
$("input[name='submit']").removeClass("disableButton");
$("input[name='submit']").prop("disabled", false);
});
Вы не можете отправить частичные ответы обратно клиенту; ответ не будет отправлен до завершения выполнения кода.
Вы должны следить за сессией пользователя и сколько времени ему нужно ждать, прежде чем войти в систему на сервере. Таким образом, ваш код может выполняться по нескольким запросам (вместо того, чтобы пытаться перенаправить ответы обратно в стиль клиентского сокета, в то время как скрипт php спит — он просто не будет работать).
Других решений пока нет …