Autentificare prin sesiune în PHP
Autentificarea noastră ar trebui să funcționeze astfel: utilizatorul,
care dorește să se autentifice pe site, accesează
pagina login.php, introduce corect
numele de utilizator și parola și apoi navighează pe paginile
site-ului deja fiind autentificat.
Pentru ca alte pagini ale site-ului să știe despre faptul că utilizatorul nostru este autentificat, trebuie să păstrăm în sesiune o notă despre acest lucru.
Deocamdată autentificarea noastră nu este chiar funcțională, deoarece încă nu am conectat sesiunea și alte pagini ale site-ului nu pot înțelege dacă este autentificat utilizatorul sau nu.
Vom stoca nota despre autentificare în variabila
de sesiune $_SESSION['auth'] - dacă acolo
este scris true, atunci utilizatorul este autentificat,
iar dacă null - atunci nu este autentificat.
Să introducem modificarea corespunzătoare în codul nostru:
<?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 {
// a introdus greșit numele de utilizator sau parola
}
}
?>
Acum pe orice pagină a site-ului putem verifica, dacă este autentificat utilizatorul sau nu, în felul următor:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Se poate restricționa textul unei pagini în întregime pentru utilizatorul neautentificat:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>text doar pentru utilizatorul autentificat</p>
</body>
</html>
<?php else: ?>
<p>vă rugăm să vă autentificați</p>
<?php endif; ?>
Se poate restricționa doar o parte a paginii:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>text pentru orice utilizator</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'text doar pentru utilizatorul autentificat';
}
?>
<p>text pentru orice utilizator</p>
</body>
</html>
Să presupunem că pe site-ul nostru, în afară de pagina login.php,
mai sunt și paginile 1.php, 2.php
și 3.php. Faceți astfel încât accesul la aceste
pagini să-l aibă doar utilizatorul autentificat.
Să presupunem că pe site-ul nostru mai este și pagina
index.php. Faceți astfel încât o parte
a acestei pagini să fie deschisă pentru toți utilizatorii,
iar o parte - doar pentru cei autentificați.
Modificați codul dumneavoastră astfel încât la autentificarea cu succes în sesiune să se înregistreze și numele de utilizator.
Faceți astfel încât la accesarea oricărei pagini a site-ului, utilizatorul autentificat să-și vadă numele de utilizator, iar cel neautentificat - un link către pagina de autentificare.