Autentimine sessiooni kaudu PHP-s
Meie autentimine peaks toimima järgmiselt: kasutaja,
kes soovib saidile sisse logida, läheb
lehele login.php, sisestab õiged
kasutajanime ja parooli ning seejärel liigub
saidil lehtedel juba sisse logitud olekus.
Selleks, et teised saidi lehed teaksid, et meie kasutaja on autenditud, peame sessiooni salvestama selle kohta märge.
Praegu ei ole meie autentimine veel päris töökorras, kuna me pole sessiooni veel ühendanud ja teised saidi lehed ei suuda aru saada, kas kasutaja on autenditud või mitte.
Hoiame autentimise märget sessiooni muutujas
$_SESSION['auth'] - kui sinna
on kirjutatud true, siis on kasutaja autenditud,
aga kui null - siis pole autenditud.
Teeme vastava paranduse oma koodi:
<?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 {
// sisestas vale kasutajanime või parooli
}
}
?>
Nüüd saame igal saidi lehel kontrollida, kas kasutaja on autenditud või mitte, järgmisel viisil:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Saab mingi lehe teksti täielikult sulgeda autentimata kasutaja eest:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>tekst ainult autenditud kasutajale</p>
</body>
</html>
<?php else: ?>
<p>palun logige sisse</p>
<?php endif; ?>
Saab sulgeda ainult osa lehest:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>tekst igale kasutajale</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'tekst ainult autenditud kasutajale';
}
?>
<p>tekst igale kasutajale</p>
</body>
</html>
Oletagem, et meie saidil, lehe login.php kõrval,
on veel lehed 1.php, 2.php
ja 3.php. Tehke nii, et nendele
lehtedele pääseks ligi ainult autenditud
kasutaja.
Oletagem, et meie saidil on veel leht
index.php. Tehke nii, et osa
sellest lehest oleks avatud kõigile kasutajatele,
aga osa - ainult autenditutele.
Muutke oma koodi nii, et edukal autentimisel salvestataks sessiooni ka kasutaja kasutajanimi.
Tehke nii, et mis tahes saidilehele sisenemisel näeks autenditud kasutaja oma kasutajanime, aga autentimata kasutaja - linki autentimislehele.