basic http authentication + PHP + MySQL Всем привет. На сайте действует HTTP-авторизация, привязанная к MySQL-базе. Вот ее код: Code: <?php // Устанавливаем соединение с базой данных require_once("config.php"); // Если пользователь не авторизовался - авторизуемся if(!isset($_SERVER['PHP_AUTH_USER'])) { Header("WWW-Authenticate: Basic realm=\"Admin Page\""); Header("HTTP/1.0 401 Unauthorized"); echo 'Авторизация отменена'; exit(); } else { if (!get_magic_quotes_gpc()) { $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']); $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']); } $_SERVER['PHP_AUTH_USER'] = str_replace("'","`",$_SERVER['PHP_AUTH_USER']); $_SERVER['PHP_AUTH_PW'] = str_replace("'","`",$_SERVER['PHP_AUTH_PW']); $query = "SELECT pass FROM userlist WHERE name='".$_SERVER['PHP_AUTH_USER']."'"; $lst = @mysql_query($query); // Если ошибка в SQL-запросе - выдаём окно if(!$lst) { Header("WWW-Authenticate: Basic realm=\"Admin Page\""); Header("HTTP/1.0 401 Unauthorized"); exit(); } // Если такого пользователя нет - выдаём окно if(mysql_num_rows($lst) == 0) { Header("WWW-Authenticate: Basic realm=\"Admin Page\""); Header("HTTP/1.0 401 Unauthorized"); echo 'Такого пользователя нет'; exit(); } // Если все проверки пройдены, сравниваем хэши паролей $pass = @mysql_fetch_array($lst); if(md5($_SERVER['PHP_AUTH_PW']) != $pass['pass']) { Header("WWW-Authenticate: Basic realm=\"Admin Page\""); Header("HTTP/1.0 401 Unauthorized"); echo 'Неправильный пароль'; exit(); } } ?> В последнем куске кода идет сравнение паролей: Code: $pass = @mysql_fetch_array($lst); if(md5($_SERVER['PHP_AUTH_PW']) != $pass['pass']) { Header("WWW-Authenticate: Basic realm=\"Admin Page\""); Header("HTTP/1.0 401 Unauthorized"); echo 'Неправильный пароль'; exit(); } Суть вот в чем - нужно, чтобы после 5 неудачных попыток ввода пароля выводилось сообщение "Система блокирована, зайдите попозже" и устанавливались куки в систему сроком на час. Пробовал вставить в последний кусок кода вот эту конструкцию: Code: $value = "UB_AUTH_OK"; setcookie("Auth", $value, time()+3600); /* 1 час */ $loc = ($_REQUEST['from']); header ("Location: ".$loc); Куки ставятся и доступ блокируется на час, но после первой же неудачной попытки и сообщение не выводится о том, что система блокирована. Куда поставить счетчик или цикл для 5 попыток, так и не удалось догнать Кто шарит, помогите разобраться, плиз.
Виртуальная память php это mysql. Создавай там таблицу ,поля буду там для IP адресов и для количества ввода и для каждого IP. Это все.