PHP да сессия орқали авторизация

Бизнинг авторизациясимиз шундай ишлаши керак: сайтимизга авторизациядан ўтишни истаган фойдаланувчи login.php саҳифасига кириб, тўғри логин ва паролни киритади ва сўнгра сайтинг бошқа саҳифаларига авторизациядан ўтган ҳолда айланади.

Сайтнинг бошқа саҳифалари бизнинг фойдаланувчи авторизациядан ўтганини билиши учун, биз бу ҳақда сессияда белги қолдиришимиз керак.

Ҳозирча бизнинг авторизациясимиз мукаммал ишламайди, чунки биз сессияни ҳали уланмаганмиз ва сайтинг бошқа саҳифалари фойдаланувчи авторизациядан ўтганми ёки йўқлигини аниклаб олмайди.

Авторизация ҳақидаги белгини сессиянинг $_SESSION['auth'] ўзгарувчисида сақлаймиз - агар унда true ёзилган бўлса, фойдаланувчи авторизациядан ўтган, агар null бўлса - авторизациядан ўтмаган.

Келгинг, кодга мос ўзгартиришларни киритайлик:

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 {
      // логин ёки паролни нотўғри киритди
    }
  }
?>

Энди биз сайтнинг istalgan саҳифасида фойдаланувчи авторизациядан ўтганми ёки йўқлигини шу тарзда текширишимиз мумкин:

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

Бирор саҳифанинг матнини авторизациядан ўтмаган фойдаланувчилар учун бутунлай ёпиб қўйиш мумкин:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>фақат авторизациядан ўтган фойдаланувчи учун матн</p>
    </body>
  </html>
<?php else: ?>
  <p>илтимос, авторизациядан ўтинг</p>
<?php endif; ?>

Саҳифанинг фақат бир қисминигина ёпиб қўйиш мумкин:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>ҳар қандай фойдаланувчи учун матн</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'фақат авторизациядан ўтган фойдаланувчи учун матн';
      }
    ?>
    <p>ҳар қандай фойдаланувчи учун матн</p>
  </body>
</html>
Задание 1

Фарз қилайлик, бизнинг сайтимизда login.php саҳифасидан ташқари, яна 1.php, 2.php ва 3.php саҳифалари мавжуд. Ушбу саҳифаларга фақат авторизациядан ўтган фойдаланувгина кириши мумкин бўлсин.

Задание 2

Фарз қилайлик, бизнинг сайтимизда яна index.php саҳифаси мавжуд. Ушбу саҳифанинг бир қисми ҳамма фойдаланувчилар учун очиқ, иккинчи қисми эса фақат авторизациядан ўтганлар учун очиқ бўлсин.

Задание 3

Кодингизни шундай модификация қилингки, муваффақиятли авторизациядан сўнг сессияга фойдаланувчининг логини ҳам ёзилсин.

Задание 4

Сайтнинг istalgan саҳифасига кирганда, авторизациядан ўтган фойдаланувчи ўз логинини кўрсин, авторизациядан ўтмаган фойдаланувчи эса авторизация саҳифасига havolaни кўрсин.