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:
<?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:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Si può chiudere il testo di una pagina qualsiasi completamente per l'utente non autenticato:
<?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:
<!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>
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.
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.
Modificate il vostro codice in modo che dopo un'autenticazione riuscita nella sessione venga memorizzato anche il login dell'utente.
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.