Autorizacija per sesiją PHP
Mūsų autorizacija turėtų veikti taip: vartotojas,
kuris nori prisijungti prie svetainės, ateina
į puslapį login.php, įveda teisingus
prisijungimo vardą ir slaptažodį ir vėliau naršo po svetainės
puslapius jau būdamas autorizuotas.
Kad kiti svetainės puslapiai žinotų apie tai, kad mūsų vartotojas yra autorizuotas, mes turime saugoti sesijoje žymę apie tai.
Kol kas mūsų autorizacija nėra visiškai veikianti, nes sesiją mes dar neprijungėme ir kiti svetainės puslapiai negali suprasti, ar vartotojas yra autorizuotas, ar ne.
Laikysime žymę apie autorizaciją sesijos kintamajame
$_SESSION['auth'] - jei ten
įrašyta true, tai vartotojas yra autorizuotas,
o jei null - tai neautorizuotas.
Įveskime atitinkamą pataisą į mūsų kodą:
<?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 {
// neteisingai įvestas prisijungimo vardas arba slaptažodis
}
}
?>
Dabar bet kuriame svetainės puslapyje galime patikrinti, ar vartotojas yra autorizuotas, ar ne, štai tokiu būdu:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Galima uždrauti visą kokio nors puslapio tekstą neautorizuotiems vartotojams:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>tekstas tik autorizuotam vartotojui</p>
</body>
</html>
<?php else: ?>
<p>prašome, prisijunkite</p>
<?php endif; ?>
Galima uždrauti tik dalį puslapio:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>tekstas bet kuriam vartotojui</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'tekstas tik autorizuotam vartotojui';
}
?>
<p>tekstas bet kuriam vartotojui</p>
</body>
</html>
Tarkime, mūsų svetainėje, be puslapio login.php,
yra dar ir puslapiai 1.php, 2.php
ir 3.php. Padarykite taip, kad prie šių
puslapių galėtų prieiti tik autorizuotas
vartotojas.
Tarkime, mūsų svetainėje yra dar ir puslapis
index.php. Padarykite taip, kad dalis
šio puslapio būtų atvira visiems vartotojams,
o dalis - tik autorizuotiems.
Modifikuokite savo kodą taip, kad sėkmingos autorizacijos metu į sesiją būtų įrašomas ir vartotojo prisijungimo vardas.
Padarykite taip, kad ateinant į bet kurį svetainės puslapį, autorizuotas vartotojas matytų savo prisijungimo vardą, o neautorizuotas - nuorodą į autorizacijos puslapį.