Тонкости авторизация через php?

Есть у меня такой код , он проверяет если пользователи вёл верный логин и пароли
как сделать так
если пользователи вёл неправильный логин и пароли то ему показывают нужную мне страничку
а если пользователи не вел неправильный логин и пароли его перебрасывало на другую страничку
вот код
<?php
session_start();// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!

if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную

if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, венитесь назад и заполните все поля!");
}
//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);

$password = stripslashes($password);
$password = htmlspecialchars($password);

//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);


// подключаемся к базе
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 



$result = mysql_query("SELECT * FROM users WHERE login='$login'",$db); //извлекаем из базы все данные о пользователе с введенным логином
$myrow = mysql_fetch_array($result);
if (empty($myrow['password']))
{
//если пользователя с введенным логином не существует
exit ("Извините, введённый вами логин или пароль неверный.");
}
else {
//если существует, то сверяем пароли
          if ($myrow['password']==$password) {
          //если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
          $_SESSION['login']=$myrow['login']; 
          $_SESSION['id']=$myrow['id'];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
          echo "Вы успешно вошли на сайт! <a href='index.php'>Главная страница</a>";
		  
          }
		  
       else {
       //если пароли не сошлись
       exit ("Извините, введённый вами логин или пароль неверный.");
	   }
}
?>
  • Вопрос задан
  • 1107 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Что вы набросились: видно же что человек - учится. Проще: объяснить как сделать правильно.
<?php
session_start();
function validfilter($value,$regexp,$flags='usi') {
  if (preg_match('/'.$regexp.'/'.$flags, $value,$result) && $result[0]==$value) return $value;  
  else return false;
}
$login=validfilter($_POST['login'],'^([A-Za-z0-9-_]{3,32})$');
$password=validfilter($_POST['password'],'^([A-Za-z0-9-_]{3,32})$');

/*
$_SESSION['user']['auth'] - флаг: авторизован или нет, 
проверяется для всех пользовательских запросов
*/
$_SESSION['user']['auth']=0; //разлогиниваем!

if ($login && $password) {
// подключаемся к базе
    include_once("bd.php");

//SALT - "соль", храним в bd.php как константу: define("SALT","изменить на свою строку");
//проверяем, что логин и пароль - совпадают и результат не пустой.
    $sql = 'SELECT 1 FROM `users` WHERE `login`="'.$login.'" AND `password`="'.md5($password.SALT).'"';
    $result = mysql_query($sql,$db);

  if (!$result) die('MySQL Error: ' . mysql_error());
  else ($result && mysql_fetch_assoc($result)) $_SESSION['user']['auth']=1; //авторизуем
  } 
}

if ($_SESSION['user']['auth']===1)  header('Location: cabinet.php'); //переходим в ЛК
else header('Location: login.php'); //страница с формой входа
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Uwe_Boll
@Uwe_Boll
Я Злой и Страшный Уве Болл в Разработке знаю Толк
удалить это мракобесие и написать нормально
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести


это надо делать только при выводе информации. Я что уже не могу слэши в пароле использовать? или кавычки.

//удаляем лишние пробелы

Я что уже не могу использовать использовать пароль из трех табуляций? Ну ладно, это можно оставить.

include ("bd.php");/


выносите подключение зависимостей в начало файла. И сделайте что-то типа фабрик для управления зависимостями, сейчас у вас все размазано.

$result = mysql_query("SELECT * FROM users WHERE login='$login'",$db); //извлекаем из базы все данные о пользователе с введенным логином
$myrow = mysql_fetch_array($result);


функции mysql_* являются устаревшими, и их наконец-то выпилили в PHP7. Используйте PDO и prepared statements для предотвращения SQL инъекций.

if ($myrow['password']==$password) {


0 == 'false' // true

ну это что бы вы задумались. В целом же хранить пароли в открытом виде это самая плохая идея которая может придти в голову. Для работы с паролями используйте Password API как удобный и безопасный способ хэширования и сравнения паролей.

В целом же ваш код заставляет меня вспомнить 2005-ый год...
Ответ написан
Комментировать
@synapse_people
Автор кода - Евгений Жопов с его руселером.ком?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы