было тестовое задание: сделать регистрацию пользователей, чтоб при успешном входе открывалась страница пользователя, при неудачном входе перенаправляло на точку входа, при трех неудачных попытках чтоб блокировало страницу входа на 5 минут и выдавало сообщение "осталось н минут", все это нужно сделать без БД но наверно я нетак авторизацию устроил, смысл моей регистрации что данные всех пользователей находятса в файле PHP: admin1|pass1|1 admin2|pass2|2 admin3|pass3|3 admin4|pass4|4 admin5|pass5|5 admin6|pass6|6 если пользовател ввел данные которые присутствуют в этой таблице, то открывается его страница, в противном случае переходит на страницу авторизации с сообщением "данные указаны неверно", вот сам файл авторизации PHP: <?php $login = $_POST['login']; $pasw = $_POST['pass']; $lines = file("1.php"); foreach($lines as $data){ list($user, $pass, $uid) = explode("|", $data); if ($user == $login && $pass == $pasw) { $in = 1 ; $gen = "page.php?log=$login&pass=$pasw"; break; } else { $gan = "<meta http-equiv=\"refresh\" content=\"0; url=/index.php?pan=1\">"; } } if ($uid =="6") echo $gan; if ($in == 1) echo "<meta http-equiv=\"refresh\" content=\"0; url=/$gen\">"; ?> вот так я оборудовал страницу авторизации PHP: <html> <title>Логин</title> <form action="polza.php" method="post"> Ваше имя: <input type="text" name="login"><br> Ваш пароль: <input type="password" name="pass"><br> <input type="submit" name="go" value="Enter!"> </form> </html> <? $login = $_GET['pan']; if($login=="1"){echo "Данные введены неверно";} ?> персональная страница пользователя при успешном входе PHP: <? $login = $_GET['log']; $pasw = $_GET['pass']; if($login == "") echo "<meta http-equiv=\"refresh\" content=\"0; url=/\">"; $lines = file("1.php"); foreach($lines as $data){ list($user, $pass, $uid) = explode("|", $data); if ($user == $login && $pass == $pasw) { $gem = $user; break; } } if ($gem !== "") {echo "Добро пожаловать $user";} else {echo "<meta http-equiv=\"refresh\" content=\"0; url=/\">";} echo "<a href = \"/page.php?log=&pass=\">выход</a>" ?> а вот как быть с таймером и блоком отдельного пользователя, я начал експерементировать с IP и таймер через date() но както все слишком уж запутано выходит, может есть более простое решение?))) очень жду ответом, пока что кроме форумчан у меня спросить неукого!!!!
Можно использовать куки - при неудачной попытке ставить куку с количеством попыток, при удачной эту куку стирать, при третьей неудачной ставить куку сроком на 5 минут и проверять при попытке логина. Можно писать в тот же файл количество неудачных попыток и время последней из них. если попытка удачная - обнулять. Если количество записанных попыток больше трех и записанное время отличается от текущего меньше чем на 5 минут, выдавать сообщение. Можно делать то же самое, но сохранять все это в массив, который скидывать в файл с помощью var_dump и подгружать к скрипту через include, так с ним в разы удобнее работать имхо.
вот переделал немного: PHP: <html> <title>Логин</title> <form action="index.php" method="post"> <TABLE> <TR><TD>Логин:</TD><TD><input type="text" name="login"></TD></TR> <TR><TD>Пароль:</TD><TD><input type="password" name="pass"></TD></TR> <TR><TD><input type="submit" name="go" value="Вход !"></TD><TD></TD></TR> </TABLE> </form> </html> <? $login = $_POST['login']; $pasw = $_POST['pass']; if ($login == true or $pasw == true) { $lines = file("1.php"); foreach($lines as $data){ list($user, $pass, $uid) = explode("|", $data); if ($user == $login && $pass == $pasw) { $in = 1 ; $gen = "page.php?log=$login&pass=$pasw"; } } if ($in == 1) {echo "<meta http-equiv=\"refresh\" content=\"0; url=/$gen\">"; echo "<center><br><b>Уважаемый ",$login," Вы успешно авторизированы</b><br> Если не сработала автоматическая переадресация нажмите <a href = \"/$gen\"><b>Здесь</b></a></center>"; } else {echo "Неверные данные";} } ?> вот почему не выходит передать данные в КУКИ ??? PHP: $login = $_POST['login']; $pasw = $_POST['pass']; if ($login == true or $pasw == true) { [b]!!!!!!!!!!!!!<вот тут>!!!!!!!!!!!!!!![/b] $lines = file("1.php"); foreach($lines as $data){ list($user, $pass, $uid) = explode("|", $data); if ($user == $login && $pass == $pasw) { $in = 1 ; $gen = "page.php?log=$login&pass=$pasw"; } } Вот в этом месте вставляю setcookie('pol', '1'); пишет ошибку, я вычитал что это связано с тем что запускаю сессию не с самого начала скрипта(( как решить эту проблему ?)))
согласен, вот уже какая хрень вышла, и это только 3 неудачных попытки входа и вывод сообщения "вы заблокированы" шош там с таймером будет гг PHP: $barr = is_file($ip.'.dat'); if ($barr == false ) { $fp = fopen($ip.'.dat', 'w+'); fwrite($fp,1); fclose($fp); } else { $fp = fopen($ip.'.dat', 'r'); $bann = fread($fp,100); fclose($fp); } if ($bann == 1) { $banr = $bann +1; $fp = fopen($ip.'.dat', 'w+'); fwrite($fp,$banr); fclose($fp); } if ($bann == 2) { echo "вы заблокированы<br>";