Авторизация чрез сесия на PHP

Нашата авторизация трябва да работи по следния начин: потребител, който иска да се авторизира на сайта, отива на страницата login.php, въвежда правилните потребителско име и парола и след това преминава през страниците на сайта вече като авторизиран.

За да могат другите страници на сайта да знаят, че нашият потребител е авторизиран, ние трябва да съхраняваме в сесията бележка за това.

Засега нашата авторизация не е напълно работеща, тъй като все още не сме включили сесията и другите страници на сайта не могат да разберат дали потребителят е авторизиран или не.

Ще съхраняваме бележка за авторизацията в сесийната променлива $_SESSION['auth'] - ако там е записано true, тогава потребителят е авторизиран, а ако е null - тогава не е авторизиран.

Нека внесем съответната корекция в нашия код:

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 {
      // грешно въведено потребителско име или парола
    }
  }
?>

Сега на всяка страница на сайта можем да проверим дали потребителят е авторизиран или не, по следния начин:

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

Може да се забрани достъпът до текста на дадена страница изцяло за неавторизиран потребител:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>текст само за авторизиран потребител</p>
    </body>
  </html>
<?php else: ?>
  <p>моля, авторизирайте се</p>
<?php endif; ?>

Може да се забрани само част от страницата:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>текст за всеки потребител</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'текст само за авторизиран потребител';
      }
    ?>
    <p>текст за всеки потребител</p>
  </body>
</html>
Задание 1

Да приемем, че на нашия сайт, освен страницата login.php, има и страници 1.php, 2.php и 3.php. Направете така, че до тези страници да може да получи достъп само авторизиран потребител.

Задание 2

Да приемем, че на нашия сайт има и страница index.php. Направете така, че част от тази страница да е отворена за всички потребители, а част - само за авторизирани.

Задание 3

Модифицирайте вашия код така, че при успешна авторизация в сесията да се записва и потребителското име на потребителя.

Задание 4

Направете така, че при посещение на която и да е страница на сайта, авторизираният потребител да вижда своето потребителско име, а неавторизираният - връзка към страницата за авторизация.