Prosty system logowania w PHP oparty na sesji
Jak ukryć wybrane fragmenty strony i udostępnić je wyłącznie zalogowanym użytkownikom?
Po wprowadzeniu nazwy użytkownika i hasła utworzymy sesję, która sprawdzi uprawnienia.
1. Lista plików
System składa się z kilku plików:
- formularz logowania
- skrypt weryfikujący wprowadzone dane i tworzący sesję
- skrypt do wylogowywania użytkownika
2. Formularz logowania w HTML
Tworzymy plik login.html zawierający formularz w HTML. Dodamy pola z nazwą użytkownika, hasło i przycisk do wysłania formularza.
<!DOCTYPE html>
<html lang="pl">
<body>
<form action="login.php" method="post">
Nazwa użytkownika: <input type="text" name="username"><br>
Hasło: <input type="password" name="password"><br>
<input type="submit" value="Zaloguj się">
</form>
</body>
</html>
3. Skrypt do logowania w PHP
Tworzymy plik login.php. Na początku rozpoczniemy sesję, zdefiniujemy nazwę użytkownika i hasło. Jeżeli dane z formularza będą poprawne, to tworzymy przekierowanie do strony protected_page.php. W przypadku błędu wyświetlamy komunikat o niepoprawnych danych logowania.
<?php
session_start();
$username = "user";
$password = "password";
if ($username === $_POST['username'] && $password === $_POST['password']) {
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $username;
header("Location: protected_page.php");
exit;
}
echo "Niepoprawne dane logowania.";
?>
4. Strona tylko dla zalogowanych użytkowników
Tworzymy plik protected_page.php. Na początku inicjujemy sesję, następnie sprawdzamy czy zawiera element "logged_in". W tym miejscu możemy także zamiast wartości boolean dodać hash, aby lepiej zabezpieczyć dostęp do autoryzowanej podstrony. W przypadku braku sesji następuje przekierowanie do strony logowania.
<?php
session_start();
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {
header("Location: login.html");
exit;
}
echo 'Witaj, ' . $_SESSION['username'] . '<br>';
echo '<a href="logout.php">Wyloguj się</a>';
?>
5. Skrypt do wylogowywania użytkownika w PHP
Tworzymy plik logout.php. Usuwamy sesję, następnie tworzymy przekierowanie do strony logowania.
<?php
session_start();
$_SESSION = [];
session_destroy();
header("Location: login.html");
exit;
?>
Podsumowanie
Powyższy skrypt logowania w PHP to prosty przykład systemu logowania. Ideą było przedstawienie działania sesji. Kod można rozbudować o bezpieczne przechowywanie haseł (np. password_verify() lub przy użyciu password_hash()), walidację danych oraz zabezpieczenia przed atakami typu Cross-Site Scripting (XSS) czy SQL Injection.
Kategorie: PHP + MySQL. Tagi: #html, #php, #formularz. Źródło obrazków: Pixabay, Font awesome.