Avtorizacija prek seje na PHP

Naša avtorizacija mora delovati takole: uporabnik, ki se želi avtentificirati na spletnem mestu, obišče stran login.php, vnese pravilno uporabniško ime in geslo ter nato po straneh spletišča že kot prijavljen uporabnik.

Da bodo druge strani spletnega mesta vedele, da je naš uporabnik avtentificiran, moramo v seji hraniti oznako o tem.

Trenutno naša avtorizacija še ni povsem delujoča, ker seje še nismo povezali in druge strani spletnega mesta ne morejo ugotoviti, ali je uporabnik avtentificiran ali ne.

Oznako o avtorizaciji bomo hranili v sejski spremenljivki $_SESSION['auth'] - če je tam zapisano true, je uporabnik avtentificiran, če pa null - potem ni.

Ustrezno popravimo našo kodo:

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 {
      // napačno uporabniško ime ali geslo
    }
  }
?>

Zdaj lahko na kateri koli strani spletnega mesta preverimo, ali je uporabnik avtentificiran ali ne, na tak način:

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

Besedilo neke strani lahko v celoti zapremo za neavtentificiranega uporabnika:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>besedilo samo za avtentificirane uporabnike</p>
    </body>
  </html>
<?php else: ?>
  <p>prosim, prijavite se</p>
<?php endif; ?>

Lahko zapremo le del strani:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>besedilo za vse uporabnike</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'besedilo samo za avtentificirane uporabnike';
      }
    ?>
    <p>besedilo za vse uporabnike</p>
  </body>
</html>
Задание 1

Recimo, da so na našem spletnem mestu poleg strani login.php še strani 1.php, 2.php in 3.php. Poskrbite, da bo dostop do teh stran imel samo avtentificiran uporabnik.

Задание 2

Recimo, da je na našem spletnem mestu še stran index.php. Poskrbite, da bo del te strani odprt za vse uporabnike, del pa - samo za avtentificirane.

Задание 3

Spremenite svojo kodo tako, da se ob uspešni avtorizaciji v sejo zapiše tudi uporabniško ime.

Задание 4

Poskrbite, da bo ob obisku katere koli strani spletišča, avtentificiran uporabnik videl svoje uporabniško ime, neavtentificiran pa - povezavo na stran za prijavo.