การรับรองความถูกต้องผ่านเซสชันบน 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 {
      // ป้อนชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง
    }
  }
?>

ตอนนี้บนหน้าใดๆ ของเว็บไซต์ เราสามารถตรวจสอบว่าผู้ใช้เข้าสู่ระบบหรือไม่ได้ด้วยวิธีนี้:

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

ทำให้เมื่อผู้ใช้เข้าสู่หน้าใดๆ ของเว็บไซต์ ผู้ใช้ที่เข้าสู่ระบบแล้วจะเห็นชื่อผู้ใช้ของตนเอง ส่วนผู้ใช้ที่ยังไม่ได้เข้าสู่ระบบจะเห็นลิงก์ไปยังหน้าเข้าสู่ระบบ