Advertisement
BedOmar

Untitled

Aug 2nd, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.47 KB | None | 0 0
  1. <?php
  2. session_start();// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
  3.          
  4. if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
  5. if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
  6. //заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
  7.  
  8. if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
  9. {
  10. exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"); //останавливаем выполнение сценариев
  11. }
  12. //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
  13. $login = stripslashes($login);
  14. $login = htmlspecialchars($login);
  15.  
  16. $password = stripslashes($password);
  17. $password = htmlspecialchars($password);
  18.  
  19. //удаляем лишние пробелы
  20. $login = trim($login);
  21. $password = trim($password);
  22.  
  23.  
  24. // дописываем новое********************************************
  25.  
  26. // подключаемся к базе
  27. include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
  28.  
  29. // минипроверка на подбор паролей
  30. $ip=getenv("HTTP_X_FORWARDED_FOR");
  31. if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }
  32.  
  33. mysqli_query ($db, "DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//удаляем ip-адреса ошибавшихся при входе пользователей через 15 минут.
  34.  
  35. $result = mysqli_query($db, "SELECT col FROM oshibka WHERE ip='$ip'");// извлекаем из базы колличество неудачных попыток входа за последние 15 минут у пользователя с данным ip
  36. $myrow = mysqli_fetch_array($result);
  37.  
  38. if ($myrow['col'] > 4) {
  39. exit ("Ви набрали логін або пароль неправильно 5 разів. Для наступних спроб зачекайте 15 хвилин."); //останавливаем выполнение сценариев
  40.  
  41.  
  42. }
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49. $result = mysqli_query($db, "SELECT * FROM users WHERE login='$login' AND password='$password' AND activation='1'"); //извлекаем из базы все данные о пользователе с введенным логином
  50. //мы дописали «AND activation='1'», то есть пользователь будет искаться только среди активированных. Желательно добавить это условие к другим подобным проверкам данных пользователя
  51. $myrow = mysqli_fetch_array($result);
  52.  
  53. if (empty($myrow['id']))
  54. {
  55. //если пользователя с введенным логином и паролем не существует,то записываем ip пользователя и с датой ошибки
  56.  
  57. $select = mysqli_query ($db, "SELECT ip FROM oshibka WHERE ip='$ip'");
  58. $tmp = mysqli_fetch_row ($select);
  59. if ($ip == $tmp[0]) {
  60. //проверяем, есть ли пользователь в таблице "oshibka"
  61. $result52 = mysqli_query($db, "SELECT col FROM oshibka WHERE ip='$ip'");
  62. $myrow52 = mysqli_fetch_array($result52);
  63.  
  64. $col = $myrow52[0] + 1;//Если есть,то приплюсовываем количесво
  65. mysqli_query ($db, "UPDATE oshibka SET col=$col,date=NOW() WHERE ip='$ip'");
  66. }
  67.  
  68. else {
  69. //если за последние 15 минут ошибок не было, то вставляем новую запись в таблицу "oshibka"
  70. mysqli_query ($db, "INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");
  71. }
  72.  
  73. exit ("Вибачте, введений Вами логін або пароль неправильний."); //останавливаем выполнение сценариев
  74.  
  75. }
  76. else {
  77.  
  78.           //если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
  79.           $_SESSION['password']=$myrow['password'];
  80.           $_SESSION['login']=$myrow['login'];
  81.           $_SESSION['id']=$myrow['id'];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
  82.          
  83. //Далее мы запоминаем данные в куки, для последующего входа.
  84. //ВНИМАНИЕ!!! ДЕЛАЙТЕ ЭТО НА ВАШЕ УСМОТРЕНИЕ, ТАК КАК ДАННЫЕ ХРАНЯТСЯ В КУКАХ БЕЗ ШИФРОВКИ
  85.  
  86. if (isset($_POST['save'])){
  87. //Если пользователь хочет, чтобы его данные сохранились для последующего входа, то сохраняем в куках его браузера
  88. setcookie("login", $_POST["login"], time()+9999999);
  89. setcookie("password", $_POST["password"], time()+9999999);
  90. setcookie("id", $myrow['id'], time()+9999999);
  91. }
  92.  
  93. if (isset($_POST['autovhod'])){
  94. //Если пользователь хочет входить на сайт автоматически
  95. setcookie("auto", "yes", time()+9999999);
  96. setcookie("login", $_POST["login"], time()+9999999);
  97. setcookie("password", $_POST["password"], time()+9999999);
  98. setcookie("id", $myrow['id'], time()+9999999);}
  99. }  
  100.  
  101. echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
  102.  
  103. //перенаправляем пользователя на главную страничку, там ему и сообщим об удачном входе
  104.  
  105. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement