Prosty system logowania w PHP oparty na sesji

Data aktualizacji: 4.07.2024r. Autor: Bartosz Stefanicki.

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.

Zobacz także

Komentarze