Сейчас загружается

Авторизация пользователя на PHP (8.1) с Bootstrap 5

Авторизация пользователя на PHP

Ниже представлен скрипт на PHP 8.1, который реализует страницу авторизации пользователя с использованием Bootstrap 5 для стилизации. Скрипт включает HTML-форму для ввода данных пользователя, а также базовую логику обработки входных данных.

/project
    ├── index.php        # Главная страница с формой авторизации
    ├── login.php        # Обработчик формы авторизации
    └── assets/          # Папка для статических файлов (CSS, JS)

Код index.php (Главная страница с формой авторизации):

<?php
session_start();

// Если пользователь уже авторизован, перенаправляем его на другую страницу
if (isset($_SESSION['user'])) {
    header("Location: dashboard.php");
    exit();
}
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Авторизация</title>
    <!-- Подключение Bootstrap 5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        <div class="row justify-content-center">
            <div class="col-md-6">
                <div class="card">
                    <div class="card-header bg-primary text-white">
                        <h4 class="mb-0">Авторизация</h4>
                    </div>
                    <div class="card-body">
                        <?php
                        // Выводим сообщение об ошибке, если есть
                        if (isset($_GET['error'])) {
                            echo '<div class="alert alert-danger">' . htmlspecialchars($_GET['error']) . '</div>';
                        }
                        ?>
                        <form action="login.php" method="POST">
                            <div class="mb-3">
                                <label for="username" class="form-label">Имя пользователя</label>
                                <input type="text" class="form-control" id="username" name="username" required>
                            </div>
                            <div class="mb-3">
                                <label for="password" class="form-label">Пароль</label>
                                <input type="password" class="form-control" id="password" name="password" required>
                            </div>
                            <button type="submit" class="btn btn-primary w-100">Войти</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Подключение Bootstrap 5 JS и Popper.js -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Код login.php (Обработчик формы авторизации):

<?php
session_start();

// Пример простых учетных данных (в реальном проекте используйте базу данных)
$valid_users = [
    'admin' => password_hash('password123', PASSWORD_BCRYPT), // Хэшированный пароль
    'user' => password_hash('userpass', PASSWORD_BCRYPT),
];

// Проверяем, что форма отправлена методом POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = trim($_POST['username']);
    $password = $_POST['password'];

    // Проверяем, существует ли пользователь с таким именем
    if (array_key_exists($username, $valid_users)) {
        // Проверяем пароль
        if (password_verify($password, $valid_users[$username])) {
            // Авторизация успешна
            $_SESSION['user'] = $username;
            header("Location: dashboard.php");
            exit();
        } else {
            // Неверный пароль
            header("Location: index.php?error=" . urlencode('Неверный пароль'));
            exit();
        }
    } else {
        // Пользователь не найден
        header("Location: index.php?error=" . urlencode('Пользователь не найден'));
        exit();
    }
} else {
    // Если форма не отправлена методом POST
    header("Location: index.php?error=" . urlencode('Неверный запрос'));
    exit();
}
?>

Код dashboard.php (Пример защищенной страницы):

<?php
session_start();

// Если пользователь не авторизован, перенаправляем его на страницу входа
if (!isset($_SESSION['user'])) {
    header("Location: index.php");
    exit();
}
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Личный кабинет</title>
    <!-- Подключение Bootstrap 5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        <div class="row justify-content-center">
            <div class="col-md-6">
                <div class="card">
                    <div class="card-header bg-success text-white">
                        <h4 class="mb-0">Добро пожаловать, <?php echo htmlspecialchars($_SESSION['user']); ?>!</h4>
                    </div>
                    <div class="card-body">
                        <p>Вы успешно авторизовались.</p>
                        <a href="logout.php" class="btn btn-danger">Выйти</a>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Подключение Bootstrap 5 JS и Popper.js -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Код logout.php (Выход из системы):

<?php
session_start();

// Уничтожаем сессию
session_destroy();

// Перенаправляем пользователя на страницу входа
header("Location: index.php");
exit();
?>

Описание работы скрипта:

  1. Страница авторизации (index.php):
    • Отображает форму для ввода имени пользователя и пароля.
    • При наличии ошибок выводит соответствующие сообщения.
  2. Обработчик формы (login.php):
    • Проверяет введенные данные на соответствие учетным записям.
    • Использует password_hash() и password_verify() для безопасной проверки паролей.
  3. Защищенная страница (dashboard.php):
    • Доступна только авторизованным пользователям.
    • Позволяет выйти из системы через ссылку.
  4. Выход из системы (logout.php):
    • Уничтожает сессию и перенаправляет пользователя на страницу входа.

Примечания:

  • В реальном проекте учетные данные должны храниться в базе данных.
  • Для защиты от SQL-инъекций используйте подготовленные выражения.
  • Для дополнительной безопасности можно добавить защиту от CSRF и XSS.

Таким образом, этот скрипт предоставляет базовую функциональность для авторизации пользователя с использованием PHP 8.1 и Bootstrap 5.

Share this content:

Отправить комментарий