Autentimine sessiooni kaudu PHP-s

Meie autentimine peaks toimima järgmiselt: kasutaja, kes soovib saidile sisse logida, läheb lehele login.php, sisestab õiged kasutajanime ja parooli ning seejärel liigub saidil lehtedel juba sisse logitud olekus.

Selleks, et teised saidi lehed teaksid, et meie kasutaja on autenditud, peame sessiooni salvestama selle kohta märge.

Praegu ei ole meie autentimine veel päris töökorras, kuna me pole sessiooni veel ühendanud ja teised saidi lehed ei suuda aru saada, kas kasutaja on autenditud või mitte.

Hoiame autentimise märget sessiooni muutujas $_SESSION['auth'] - kui sinna on kirjutatud true, siis on kasutaja autenditud, aga kui null - siis pole autenditud.

Teeme vastava paranduse oma koodi:

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 {
      // sisestas vale kasutajanime või parooli
    }
  }
?>

Nüüd saame igal saidi lehel kontrollida, kas kasutaja on autenditud või mitte, järgmisel viisil:

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

Saab mingi lehe teksti täielikult sulgeda autentimata kasutaja eest:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>tekst ainult autenditud kasutajale</p>
    </body>
  </html>
<?php else: ?>
  <p>palun logige sisse</p>
<?php endif; ?>

Saab sulgeda ainult osa lehest:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>tekst igale kasutajale</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'tekst ainult autenditud kasutajale';
      }
    ?>
    <p>tekst igale kasutajale</p>
  </body>
</html>
Задание 1

Oletagem, et meie saidil, lehe login.php kõrval, on veel lehed 1.php, 2.php ja 3.php. Tehke nii, et nendele lehtedele pääseks ligi ainult autenditud kasutaja.

Задание 2

Oletagem, et meie saidil on veel leht index.php. Tehke nii, et osa sellest lehest oleks avatud kõigile kasutajatele, aga osa - ainult autenditutele.

Задание 3

Muutke oma koodi nii, et edukal autentimisel salvestataks sessiooni ka kasutaja kasutajanimi.

Задание 4

Tehke nii, et mis tahes saidilehele sisenemisel näeks autenditud kasutaja oma kasutajanime, aga autentimata kasutaja - linki autentimislehele.