Autenticação via sessão em PHP

Nossa autenticação deve funcionar da seguinte forma: o usuário, que deseja se autenticar no site, acessa a página login.php, insere o login e senha corretos e em seguida navega pelas páginas do site já estando autenticado.

Para que outras páginas do site saibam que nosso usuário está autenticado, devemos armazenar na sessão uma marcação sobre isso.

No momento, nossa autenticação não está totalmente funcional, pois ainda não conectamos a sessão e outras páginas do site não conseguem saber se o usuário está autenticado ou não.

Vamos armazenar a marcação de autenticação na variável de sessão $_SESSION['auth'] - se estiver escrito true, então o usuário está autenticado, e se for null - então não está autenticado.

Vamos fazer a correção correspondente em nosso código:

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 {
      // login ou senha incorretos
    }
  }
?>

Agora, em qualquer página do site, podemos verificar se o usuário está autenticado ou não, desta forma:

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

Podemos fechar o texto de alguma página inteiramente para o usuário não autenticado:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>texto apenas para usuário autenticado</p>
    </body>
  </html>
<?php else: ?>
  <p>por favor, faça login</p>
<?php endif; ?>

Podemos fechar apenas parte da página:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>texto para qualquer usuário</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'texto apenas para usuário autenticado';
      }
    ?>
    <p>texto para qualquer usuário</p>
  </body>
</html>
Задание 1

Suponha que em nosso site, além da página login.php, haja também as páginas 1.php, 2.php e 3.php. Faça com que apenas usuários autenticados possam acessar essas páginas.

Задание 2

Suponha que em nosso site haja também a página index.php. Faça com que parte desta página esteja aberta para todos os usuários, e parte - apenas para os autenticados.

Задание 3

Modifique seu código para que, após uma autenticação bem-sucedida, o login do usuário também seja armazenado na sessão.

Задание 4

Faça com que, ao acessar qualquer página do site, o usuário autenticado veja seu login, e o não autenticado - um link para a página de autenticação.