PHPda sessiya orqali avtorizatsiya
Bizning avtorizatsiyamiz shunday ishlashi kerak: saytda
avtorizatsiyadan o'tmoqchi bo'lgan foydalanuvchi
login.php sahifasiga kiradi, to'g'ri login
va parolni kiritadi va keyin sayt sahifalari
bo'ylab avtorizatsiyadan o'tgan holda sayr qiladi.
Saytning boshqa sahifalari foydalanuvchimiz avtorizatsiyadan o'tganligini bilishi uchun, biz buni sessiyada saqlashimiz kerak.
Hozircha bizning avtorizatsiyamiz butunlay ishlamaydi, chunki sessiyani hali ulamadik va saytning boshqa sahifalari foydalanuvchi avtorizatsiyadan o'tganmi yoki yo'qmi aniqlay olmaydi.
Avtorizatsiya belgisini $_SESSION['auth']
sessiya o'zgaruvchisida saqlaymiz - agar u
true bo'lsa, foydalanuvchi avtorizatsiyadan
o'tgan, null bo'lsa, o'tmagan hisoblanadi.
Keling, kodimizga mos o'zgartirish kiritaylik:
<?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 yoki parol noto'g'ri kiritilgan
}
}
?>
Endi saytning istalgan sahifasida foydalanuvchi avtorizatsiyadan o'tganmi yoki yo'qmi shu tarzda tekshirishimiz mumkin:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Ma'lum bir sahifaning matnini avtorizatsiyadan o'tmagan foydalanuvchilar uchun butunlay yopish mumkin:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>faqat avtorizatsiyadan o'tgan foydalanuvchi uchun matn</p>
</body>
</html>
<?php else: ?>
<p>iltimos, avtorizatsiyadan o'ting</p>
<?php endif; ?>
Faqat sahifaning bir qismini yopish mumkin:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>har qanday foydalanuvchi uchun matn</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'faqat avtorizatsiyadan o'tgan foydalanuvchi uchun matn';
}
?>
<p>har qanday foydalanuvchi uchun matn</p>
</body>
</html>
Faraz qilaylik, bizning saytimizda login.php
sahifasidan tashqari, 1.php, 2.php
va 3.php sahifalari ham mavjud. Ushbu
sahifalarga faqat avtorizatsiyadan o'tgan
foydalanuvchi kirishi mumkin bo'lsin.
Faraz qilaylik, bizning saytimizda index.php
sahifasi ham mavjud. Ushbu sahifaning bir qismi
barcha foydalanuvchilar uchun ochiq, qolgan qismi
esa faqat avtorizatsiyadan o'tganlar uchun bo'lsin.
Kodingizni muvaffaqiyatli avtorizatsiyadan so'ng sessiyaga foydalanuvchi logini ham yoziladigan qilib o'zgartiring.
Saytning istalgan sahifasiga kirganda, avtorizatsiyadan o'tgan foydalanuvchi o'z loginini, o'tmagan foydalanuvchi esa avtorizatsiya sahifasiga havolani ko'rsin.