Bejelentkezés session segítségével PHP-n

A bejelentkezésünknek úgy kell működnie: a felhasználó, aki be szeretne jelentkezni a weboldalra, felmegy a login.php oldalra, beírja a helyes felhasználónevet és jelszót, majd a weboldal további oldalain már bejelentkezett felhasználóként navigál.

Ahhoz, hogy a weboldal más oldalai is tudják, hogy a felhasználónk be van jelentkezve, egy erre vonatkozó jelölést kell tárolnunk a session-ben.

Egyelőre a bejelentkezésünk nem teljesen működőképes, mivel a session-t még nem kapcsoltuk be, és a weboldal más oldalai nem tudják megállapítani, hogy a felhasználó be van-e jelentkezve vagy sem.

A bejelentkezés jelölését a $_SESSION['auth'] session változóban fogjuk tárolni - ha ott a true érték van, akkor a felhasználó be van jelentkezve, ha null - akkor nincs bejelentkezve.

Végezzük el a megfelelő módosítást a kódunkban:

html<?php
  session_start();
  
  if (!empty($_POST['password']) and !empty($_POST['login'])) {
    $login = $_POST['login'];
    $password = $_POST['password'];
    
    $query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
    $res = mysqli_query($link, $query);
    $user = mysqli_fetch_assoc($res);
    
    if (!empty($user)) {
      $_SESSION['auth'] = true;
    } else {
      // helytelen felhasználónév vagy jelszó
    }
  }
?>

Most a weboldal bármely oldalán ellenőrizhetjük, hogy a felhasználó be van-e jelentkezve, a következő módon:

html<?php
  if (!empty($_SESSION['auth'])) {
    
  }
?>

Egy adott oldal teljes szövegét le lehet zárni a nem bejelentkezett felhasználók elől:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>szöveg csak bejelentkezett felhasználók számára</p>
    </body>
  </html>
<?php else: ?>
  <p>kérjük, jelentkezzen be</p>
<?php endif; ?>

Csak az oldal egy részét is le lehet zárni:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>szöveg bármely felhasználó számára</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'szöveg csak bejelentkezett felhasználók számára';
      }
    ?>
    <p>szöveg bármely felhasználó számára</p>
  </body>
</html>
Задание 1

Tegyük fel, hogy a weboldalunkon a login.php oldalon kívül van még 1.php, 2.php és 3.php oldal is. Állítsa be, hogy ezekhez az oldalakhoz csak bejelentkezett felhasználók férhetnek hozzá.

Задание 2

Tegyük fel, hogy a weboldalunkon van még egy index.php oldal is. Állítsa be, hogy az oldal egy része minden felhasználó számára elérhető legyen, egy része pedig csak bejelentkezett felhasználók számára.

Задание 3

Módosítsa a kódját úgy, hogy a sikeres bejelentkezéskor a session-be a felhasználó felhasználóneve is kerüljön mentésre.

Задание 4

Állítsa be, hogy a weboldal bármely oldalára érkezve a bejelentkezett felhasználó a saját felhasználónevét lássa, a nem bejelentkezett pedig a bejelentkezési oldalra mutató linket.