Autorizace pomocí session v PHP

Naše autorizace by měla fungovat takto: uživatel, který se chce na webu autorizovat, přijde na stránku login.php, zadá správné přihlašovací jméno a heslo a poté již chodí po stránkách webu jako autorizovaný.

Aby ostatní stránky webu věděly, že je náš uživatel autorizován, musíme v session uchovávat poznámku o tom.

Zatím naše autorizace není zcela funkční, protože jsme session ještě nepřipojili a ostatní stránky webu nemohou zjistit, zda je uživatel autorizován nebo ne.

Poznámku o autorizaci budeme uchovávat v proměnné session $_SESSION['auth'] - pokud je tam zapsáno true, pak je uživatel autorizován, a pokud null - pak není autorizován.

Pojďme provést odpovídající úpravu v našem kódu:

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 {
      // nesprávně zadal přihlašovací jméno nebo heslo
    }
  }
?>

Nyní na jakékoli stránce webu můžeme zkontrolovat, zda je uživatel autorizován nebo ne, například takto:

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

Lze uzavřít text nějaké stránky celý pro neautorizovaného uživatele:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>text pouze pro autorizovaného uživatele</p>
    </body>
  </html>
<?php else: ?>
  <p>prosím, autorizujte se</p>
<?php endif; ?>

Lze uzavřít pouze část stránky:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>text pro jakéhokoli uživatele</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'text pouze pro autorizovaného uživatele';
      }
    ?>
    <p>text pro jakéhokoli uživatele</p>
  </body>
</html>
Задание 1

Nechť na našem webu, kromě stránky login.php, jsou ještě stránky 1.php, 2.php a 3.php. Zařiďte, aby k těmto stránkám měl přístup pouze autorizovaný uživatel.

Задание 2

Nechť na našem webu je ještě stránka index.php. Zařiďte, aby část této stránky byla otevřena pro všechny uživatele, a část - pouze pro autorizované.

Задание 3

Upravte svůj kód tak, aby při úspěšné autorizaci se do session zapsalo také přihlašovací jméno uživatele.

Задание 4

Zařiďte, aby při příchodu na jakoukoli stránku webu, autorizovaný uživatel viděl své přihlašovací jméno, a neautorizovaný - odkaz na stránku autorizace.