Autorizacija per sesiją PHP

Mūsų autorizacija turėtų veikti taip: vartotojas, kuris nori prisijungti prie svetainės, ateina į puslapį login.php, įveda teisingus prisijungimo vardą ir slaptažodį ir vėliau naršo po svetainės puslapius jau būdamas autorizuotas.

Kad kiti svetainės puslapiai žinotų apie tai, kad mūsų vartotojas yra autorizuotas, mes turime saugoti sesijoje žymę apie tai.

Kol kas mūsų autorizacija nėra visiškai veikianti, nes sesiją mes dar neprijungėme ir kiti svetainės puslapiai negali suprasti, ar vartotojas yra autorizuotas, ar ne.

Laikysime žymę apie autorizaciją sesijos kintamajame $_SESSION['auth'] - jei ten įrašyta true, tai vartotojas yra autorizuotas, o jei null - tai neautorizuotas.

Įveskime atitinkamą pataisą į mūsų kodą:

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 {
      // neteisingai įvestas prisijungimo vardas arba slaptažodis
    }
  }
?>

Dabar bet kuriame svetainės puslapyje galime patikrinti, ar vartotojas yra autorizuotas, ar ne, štai tokiu būdu:

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

Galima uždrauti visą kokio nors puslapio tekstą neautorizuotiems vartotojams:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>tekstas tik autorizuotam vartotojui</p>
    </body>
  </html>
<?php else: ?>
  <p>prašome, prisijunkite</p>
<?php endif; ?>

Galima uždrauti tik dalį puslapio:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>tekstas bet kuriam vartotojui</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'tekstas tik autorizuotam vartotojui';
      }
    ?>
    <p>tekstas bet kuriam vartotojui</p>
  </body>
</html>
Задание 1

Tarkime, mūsų svetainėje, be puslapio login.php, yra dar ir puslapiai 1.php, 2.php ir 3.php. Padarykite taip, kad prie šių puslapių galėtų prieiti tik autorizuotas vartotojas.

Задание 2

Tarkime, mūsų svetainėje yra dar ir puslapis index.php. Padarykite taip, kad dalis šio puslapio būtų atvira visiems vartotojams, o dalis - tik autorizuotiems.

Задание 3

Modifikuokite savo kodą taip, kad sėkmingos autorizacijos metu į sesiją būtų įrašomas ir vartotojo prisijungimo vardas.

Задание 4

Padarykite taip, kad ateinant į bet kurį svetainės puslapį, autorizuotas vartotojas matytų savo prisijungimo vardą, o neautorizuotas - nuorodą į autorizacijos puslapį.