Autentifikācija caur sesiju PHP

Mūsu autentifikācijai jāstrādā šādi: lietotājs, kurš vēlas autentificēties vietnē, iet uz lapu login.php, ievada pareizo lietotājvārdu un paroli un pēc tam pārvietojas pa vietnes lapām jau kā autentificēts.

Lai citas vietnes lapas zinātu, ka mūsu lietotājs ir autentificējies, mums jāuzglabā sesijā atzīme par to.

Pagaidām mūsu autentifikācija nav pilnībā darba gatava, jo sesiju mēs vēl neesam pievienojuši un citas vietnes lapas nevar saprast, vai lietotājs ir autentificējies vai nē.

Mēs glabāsim atzīmi par autentifikāciju sesijas mainīgajā $_SESSION['auth'] - ja tur ierakstīts true, tad lietotājs ir autentificējies, bet ja null - tad nav autentificējies.

Ieviesīsim atbilstošas labojumus mūsu 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 {
      // nepareizi ievadīts lietotājvārds vai parole
    }
  }
?>

Tagad jebkurā vietnes lapā mēs varam pārbaudīt, vai lietotājs ir autentificējies vai nē, šādā veidā:

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

Var aizvērt kādas lapas tekstu vispār neautentificētam lietotājam:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>teksts tikai autentificētam lietotājam</p>
    </body>
  </html>
<?php else: ?>
  <p>lūdzu, autentificējieties</p>
<?php endif; ?>

Var aizvērt tikai daļu no lapas:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>teksts jebkuram lietotājam</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'teksts tikai autentificētam lietotājam';
      }
    ?>
    <p>teksts jebkuram lietotājam</p>
  </body>
</html>
Задание 1

Pieņemsim, ka mūsu vietnē, bez lapas login.php, ir arī lapas 1.php, 2.php un 3.php. Izveidojiet tā, lai pie šīm lapām varētu piekļūt tikai autentificēts lietotājs.

Задание 2

Pieņemsim, ka mūsu vietnē ir vēl lapa index.php. Izveidojiet tā, lai daļa šīs lapas būtu pieejama visiem lietotājiem, bet daļa - tikai autentificētiem.

Задание 3

Modificējiet savu kodu tā, lai veiksmīgas autentifikācijas gadījumā sesijā tiktu ierakstīts arī lietotāja lietotājvārds.

Задание 4

Izveidojiet tā, lai ienākot jebkurā vietnes lapā, autentificēts lietotājs redzētu savu lietotājvārdu, bet neautentificēts - saiti uz autentifikācijas lapu.