Autenticazione tramite sessione in PHP

La nostra autenticazione dovrebbe funzionare così: l'utente, che desidera autenticarsi sul sito, accede alla pagina login.php, inserisce le credenziali corrette (login e password) e successivamente naviga nelle pagine del sito già autenticato.

Affinché le altre pagine del sito sappiano che il nostro utente è autenticato, dobbiamo memorizzare nella sessione un segno di questo.

Per ora la nostra autenticazione non è del tutto funzionante, poiché non abbiamo ancora collegato la sessione e le altre pagine del sito non possono capire se l'utente è autenticato o meno.

Memorizzeremo il segno di autenticazione nella variabile di sessione $_SESSION['auth'] - se lì è scritto true, allora l'utente è autenticato, mentre se è null - non è autenticato.

Apportiamo la modifica corrispondente al nostro codice:

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 o password errati
    }
  }
?>

Ora su qualsiasi pagina del sito possiamo verificare se l'utente è autenticato o meno, in questo modo:

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

Si può chiudere il testo di una pagina qualsiasi completamente per l'utente non autenticato:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>testo solo per l'utente autenticato</p>
    </body>
  </html>
<?php else: ?>
  <p>per favore, autenticati</p>
<?php endif; ?>

Si può chiudere solo una parte della pagina:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>testo per qualsiasi utente</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'testo solo per l'utente autenticato';
      }
    ?>
    <p>testo per qualsiasi utente</p>
  </body>
</html>
Задание 1

Supponiamo che sul nostro sito, oltre alla pagina login.php, ci siano anche le pagine 1.php, 2.php e 3.php. Fate in modo che a queste pagine possa accedere solo l'utente autenticato.

Задание 2

Supponiamo che sul nostro sito ci sia anche la pagina index.php. Fate in modo che una parte di questa pagina sia aperta a tutti gli utenti, e una parte - solo per quelli autenticati.

Задание 3

Modificate il vostro codice in modo che dopo un'autenticazione riuscita nella sessione venga memorizzato anche il login dell'utente.

Задание 4

Fate in modo che accedendo a qualsiasi pagina del sito, l'utente autenticato veda il proprio login, mentre quello non autenticato - un link alla pagina di autenticazione.