Autoryzacja przez sesję w PHP

Nasza autoryzacja powinna działać tak: użytkownik, który chce się zalogować na stronie, wchodzi na stronę login.php, wprowadza poprawne login i hasło i następnie porusza się po stronach strony już będąc zalogowanym.

Aby inne strony serwisu wiedziały o tym, że nasz użytkownik jest zalogowany, musimy przechowywać w sesji oznaczenie o tym.

Na razie nasza autoryzacja nie jest całkiem działająca, ponieważ sesji jeszcze nie podłączyliśmy i inne strony serwisu nie mogą zrozumieć, czy użytkownik jest zalogowany, czy nie.

Będziemy przechowywać oznaczenie o autoryzacji w zmiennej sesji $_SESSION['auth'] - jeśli jest tam zapisane true, to użytkownik jest zalogowany, a jeśli null - to nie zalogowany.

Wprowadźmy odpowiednią poprawkę do naszego kodu:

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 {
      // nieprawidłowo wprowadził login lub hasło
    }
  }
?>

Teraz na dowolnej stronie serwisu możemy sprawdzić, czy użytkownik jest zalogowany czy nie, w ten sposób:

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

Można zamknąć tekst jakiejś strony całkowicie dla niezalogowanego użytkownika:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>tekst tylko dla zalogowanego użytkownika</p>
    </body>
  </html>
<?php else: ?>
  <p>proszę się zalogować</p>
<?php endif; ?>

Można zamknąć tylko część strony:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>tekst dla każdego użytkownika</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'tekst tylko dla zalogowanego użytkownika';
      }
    ?>
    <p>tekst dla każdego użytkownika</p>
  </body>
</html>
Задание 1

Załóżmy, że na naszej stronie, oprócz strony login.php, są jeszcze strony 1.php, 2.php i 3.php. Zrób tak, aby do tych stron mógł uzyskać dostęp tylko zalogowany użytkownik.

Задание 2

Załóżmy, że na naszej stronie jest jeszcze strona index.php. Zrób tak, aby część tej strony była otwarta dla wszystkich użytkowników, a część - tylko dla zalogowanych.

Задание 3

Zmodyfikuj swój kod tak, aby przy udanej autoryzacji do sesji zapisywał się również login użytkownika.

Задание 4

Zrób tak, aby przy wejściu na dowolną stronę serwisu, zalogowany użytkownik widział swój login, a nie zalogowany - link na stronę autoryzacji.