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:

html<?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:

html<?php
  if (!empty($_SESSION['auth'])) {
    
  }
?>

Ma'lum bir sahifaning matnini avtorizatsiyadan o'tmagan foydalanuvchilar uchun butunlay yopish mumkin:

html<?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:

html<!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>
Задание 1

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.

Задание 2

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.

Задание 3

Kodingizni muvaffaqiyatli avtorizatsiyadan so'ng sessiyaga foydalanuvchi logini ham yoziladigan qilib o'zgartiring.

Задание 4

Saytning istalgan sahifasiga kirganda, avtorizatsiyadan o'tgan foydalanuvchi o'z loginini, o'tmagan foydalanuvchi esa avtorizatsiya sahifasiga havolani ko'rsin.