PHP - MySQL Аутентификация: Пособие для начинающих

Здравствуйте, начинающие веб-разработчики! Сегодня мы отправимся в увлекательное путешествие в мир PHP и MySQL, чтобы создать простой, но мощную систему аутентификации. Кто-то, кто уже много лет teaches это, может сказать вам, что овладение этим навыком похоже на открывание тайной двери в мире веб-разработки. Итак, натянем рукава и окунемся в это!

PHP - MySQL Login

Понимание большой картины

Прежде чем мы начнем программировать, давайте на минутку подумаем, что мы пытаемся достичь. Представьте, что вы строите treehouse. Вам нужна прочная основа, стены, крыша и способ входа и выхода. Наша система аутентификации PHP-MySQL аналогична:

  • Config.php: Это наша основа, которая connect нас к базе данных.
  • Login.php: Представьте это как дверь к нашему treehouse.
  • Session.php: Это отслеживает, кто находится внутри treehouse.
  • Welcome.php: Уютное помещение, где авторизованные пользователи проводят время.
  • Logout.php: Tabличка с выходом, показывающая пользователям путь наружу.

Теперь давайте построим каждую часть шаг за шагом!

Config.php: Построение фундамента

Этот файл похож на тайный握手 между PHP и MySQL. Это место, где мы храним наши данные для подключения к базе данных.

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'login_demo');

$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if($conn === false){
die("ОШИБКА: Невозможно подключиться. " . mysqli_connect_error());
}
?>

Давайте разберем это:

  • Мы используем define() для установки констант для наших данных базы данных.
  • mysqli_connect() устанавливает подключение к нашей базе данных MySQL.
  • Если подключение не удается, мы используем die() для остановки выполнения и отображения сообщения об ошибке.

Совет профессионала: Никогда не делитесь своими реальными данными для подключения к базе данных! Этот пример использует значения по умолчанию, но в реальном проекте храните их в секрете!

Login.php: Страж ворот

Это место, где происходит магия. Пользователи вводят свои данные для входа, и мы проверяем, разрешено ли им войти.

<?php
session_start();
require_once "config.php";

if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);

$sql = "SELECT id, username, password FROM users WHERE username = ?";

if($stmt = mysqli_prepare($conn, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;

if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);

if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: welcome.php");
} else{
$login_err = "Неправильное имя пользователя или пароль.";
}
}
} else{
$login_err = "Неправильное имя пользователя или пароль.";
}
} else{
echo "Ой! Произошла ошибка. Пожалуйста, попробуйте еще раз позже.";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Вход</title>
</head>
<body>
<h2>Вход</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>Имя пользователя</label>
<input type="text" name="username" required>
</div>
<div>
<label>Пароль</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="Войти">
</div>
</form>
</body>
</html>

Вау, это много информации для восприятия! Давайте разберем это:

  • Мы начинаем сеанс и включаем наш config файл.
  • Мы проверяем, был ли отправлен form с помощью POST.
  • Мы используем prepared statements, чтобы предотвратить SQL injection (распространенную уязвимость безопасности).
  • Мы проверяем пароль с помощью password_verify() (всегда храните пароли в зашифрованном виде в реальных проектах!).
  • Если вход успешен, мы устанавливаем variables сеанса и перенаправляем на welcome.php.
  • Мы также имеем простой HTML form для ввода данных пользователями.

помните, в реальных приложениях вы бы добавили больше мер безопасности и обработки ошибок!

Session.php: Охранник

Этот файл проверяет, вошел ли пользователь в систему. Если нет, он перенаправляет их на страницу входа.

<?php
session_start();

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>

Коротко и ясно! Этот код:

  • Начинает сеанс.
  • Проверяет, вошел ли пользователь в систему.
  • Если нет, перенаправляет их на страницу входа.

Welcome.php: Зона ВИП

Это место, куда пользователи попадают после успешного входа в систему.

<?php
require_once "session.php";
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Добро пожаловать</title>
</head>
<body>
<h1>Здравствуйте, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Добро пожаловать на наш сайт.</h1>
<p>
<a href="logout.php">Выйти</a>
</p>
</body>
</html>

Вот что происходит:

  • Мы включаем session.php, чтобы убедиться, что только вошедшие в систему пользователи могут доступа к этой странице.
  • Мы отображаем персонализированное приветственное сообщение, используя имя пользователя, хранящееся в сеансе.
  • Мы предоставляем ссылку для выхода.

Logout.php: Выход

Наконец, нам нужно безопасно завершить сеанс пользователя.

<?php
session_start();
$_SESSION = array();
session_destroy();
header("location: login.php");
exit;
?>

Этот скрипт:

  • Начинает сеанс.
  • Удаляет все variables сеанса.
  • Разрушает сеанс.
  • Перенаправляет пользователя обратно на страницу входа.

Вся система вместе

Теперь, когда мы построили все части, давайте подведем итог, как они работают вместе:

Файл Назначение Основные функции
Config.php Подключение к базе данных mysqli_connect()
Login.php Проверка аутентификации пользователя mysqli_prepare(), password_verify()
Session.php Управление сеансом session_start(), $_SESSION проверки
Welcome.php Страница авторизованного пользователя Отображение персонализированного контента
Logout.php Завершение сеанса пользователя session_destroy()

И вот оно! Вы только что создали базовую систему аутентификации PHP-MySQL. Помните, это только начало. В реальных приложениях вы бы добавили больше функций, таких как:

  • Функция сброса пароля
  • Опция "Запомнить меня"
  • Более robust обработка ошибок
  • Улучшенные меры безопасности

Продолжайте практиковаться, будьте любопытны, и скоро вы будете легко создавать сложные веб-приложения. Удачи в программировании, будущие веб-волшебники!

Credits: Image by storyset