Avtorizacija prek seje na PHP
Naša avtorizacija mora delovati takole: uporabnik,
ki se želi avtentificirati na spletnem mestu, obišče
stran login.php, vnese pravilno
uporabniško ime in geslo ter nato po straneh
spletišča že kot prijavljen uporabnik.
Da bodo druge strani spletnega mesta vedele, da je naš uporabnik avtentificiran, moramo v seji hraniti oznako o tem.
Trenutno naša avtorizacija še ni povsem delujoča, ker seje še nismo povezali in druge strani spletnega mesta ne morejo ugotoviti, ali je uporabnik avtentificiran ali ne.
Oznako o avtorizaciji bomo hranili v sejski spremenljivki
$_SESSION['auth'] - če je tam
zapisano true, je uporabnik avtentificiran,
če pa null - potem ni.
Ustrezno popravimo našo kodo:
<?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 {
// napačno uporabniško ime ali geslo
}
}
?>
Zdaj lahko na kateri koli strani spletnega mesta preverimo, ali je uporabnik avtentificiran ali ne, na tak način:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Besedilo neke strani lahko v celoti zapremo za neavtentificiranega uporabnika:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>besedilo samo za avtentificirane uporabnike</p>
</body>
</html>
<?php else: ?>
<p>prosim, prijavite se</p>
<?php endif; ?>
Lahko zapremo le del strani:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>besedilo za vse uporabnike</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'besedilo samo za avtentificirane uporabnike';
}
?>
<p>besedilo za vse uporabnike</p>
</body>
</html>
Recimo, da so na našem spletnem mestu poleg strani login.php
še strani 1.php, 2.php
in 3.php. Poskrbite, da bo dostop do teh
stran imel samo avtentificiran uporabnik.
Recimo, da je na našem spletnem mestu še stran
index.php. Poskrbite, da bo del
te strani odprt za vse uporabnike,
del pa - samo za avtentificirane.
Spremenite svojo kodo tako, da se ob uspešni avtorizaciji v sejo zapiše tudi uporabniško ime.
Poskrbite, da bo ob obisku katere koli strani spletišča, avtentificiran uporabnik videl svoje uporabniško ime, neavtentificiran pa - povezavo na stran za prijavo.