Тема: Сторінка логіну (Сесії).
Створення простого екрану входу з використанням “захардкоженого” логіну/пароля та запис статусу в $_SESSION.
Мета: Зрозуміти проблему зберігання стану (stateless) в протоколі HTTP та навчитись ідентифікувати користувача між перезавантаженням різних сторінок на основі Cookie і Сесій.
Технологічний стек: PHP Sessions (session_start(), $_SESSION), імітація аутентифікації.
login.php).admin та 12345).session_start() для відкриття сесії та збереження факту успішного входу користувача через $_SESSION['is_logged_in'] = true.create.php), щоб на неї не могли зайти гості (анонімні відвідувачі).login.php)Створіть файл login.php з HTML-формою входу. Вона має містити два поля: <input type="text" name="username"> та <input type="password" name="password">, кнопку “Увійти” і відправлятися методом POST сама на себе.
Угорі файлу login.php, обов’язково В САМОМУ ПОЧАТКУ (навіть до пробілів чи тегу <!DOCTYPE html>), викличте команду session_start();.
Обробляйте POST-запит: якщо отримані $_POST['username'] і $_POST['password'] ідеально збігаються з умовними ‘admin’ та ‘12345’, запишіть позитивний стан у сесію та перенаправте користувача:
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($_POST['username'] === 'admin' && $_POST['password'] === '12345') {
$_SESSION['is_logged_in'] = true;
$_SESSION['user_name'] = 'Адміністратор';
header('Location: index.php'); // Перенаправлення на головну
exit;
} else {
$error = "Невірний логін або пароль!";
}
}
?>
Перейдіть у файл index.php. Також додайте в самому першому рядку session_start();.
У <header> напишіть if: якщо isset($_SESSION['is_logged_in']) && $_SESSION['is_logged_in'] === true, то виведіть привітання: “Привіт, <?= $_SESSION['user_name'] ?>! [Вийти]”. Інакше — “Ви увійшли як Гість. [Увійти]” (де [Увійти] — це посилання <a href="login.php">).
Відкрийте файл create.php. На початку файлу викличте session_start(); і відразу ж перевірте, чи залогінений користувач:
<?php
session_start();
if (!isset($_SESSION['is_logged_in']) || $_SESSION['is_logged_in'] !== true) {
header('Location: login.php');
exit;
}
?>
Тепер, якщо неавторизований користувач захоче руками ввести адресу http://localhost/.../create.php у браузері, його миттєво “викине” назад на форму логіну. Спробуйте це перевірити в режимі “Інкогніто”.
$_SESSION)? Де фізично зберігаються дані змінних сесії (на клієнті в браузері чи на сервері)?PHPSESSID і яку функцію виконує цей файл cookie?session_start() на самому-самому початку файлу, навіть до тегу <html> чи пробілів? Яку помилку ви отримаєте, якщо викличете це після HTML-коду (Headers already sent)?header('Location: ...') і чому після перенаправлення обов’язково треба писати exit (або die)?lab9.md додати фрагмент коду авторизації (login.php) і перенаправлення (обмеження доступу з create.php).lab9.md відповісти на контрольні запитання.