การรับรองความถูกต้องผ่านเซสชันบน PHP
ระบบรับรองความถูกต้องของเราควรทำงานดังนี้: ผู้ใช้ที่ต้องการเข้าสู่ระบบบนเว็บไซต์ จะเข้าหน้า login.php ป้อนชื่อผู้ใช้และรหัสผ่านที่ถูกต้อง และ หลังจากนั้นก็สามารถเข้าไปยังหน้าต่างๆ ของเว็บไซต์ในสถานะที่เข้าสู่ระบบแล้ว
เพื่อให้หน้าอื่นๆ ของเว็บไซต์ทราบว่าผู้ใช้ของเราได้เข้าสู่ระบบแล้ว เราจำเป็นต้องเก็บเครื่องหมายแสดงสถานะนี้ไว้ในเซสชัน
ในตอนนี้ระบบรับรองความถูกต้องของเรายังใช้งานได้ไม่สมบูรณ์นัก เนื่องจากเรายังไม่ได้เชื่อมต่อเซสชัน และหน้าอื่นๆ ของเว็บไซต์ไม่สามารถทราบได้ว่าผู้ใช้เข้าสู่ระบบหรือไม่
เราจะเก็บเครื่องหมายการรับรองความถูกต้องไว้ในตัวแปรเซสชัน $_SESSION['auth'] - หากเขียนค่า true ไว้ แสดงว่าผู้ใช้ได้เข้าสู่ระบบแล้ว แต่ถ้าเป็น null แสดงว่ายังไม่ได้เข้าสู่ระบบ
ลองมาแก้ไขโค้ดของเราให้สอดคล้องกัน:
<?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 {
// ป้อนชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง
}
}
?>
ตอนนี้บนหน้าใดๆ ของเว็บไซต์ เราสามารถตรวจสอบว่าผู้ใช้เข้าสู่ระบบหรือไม่ได้ด้วยวิธีนี้:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
เราสามารถปิดเนื้อหาบนหน้าใดหน้าหนึ่งทั้งหมดสำหรับผู้ใช้ที่ไม่ได้เข้าสู่ระบบได้:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>เนื้อหาสำหรับผู้ใช้ที่เข้าสู่ระบบแล้วเท่านั้น</p>
</body>
</html>
<?php else: ?>
<p>กรุณาเข้าสู่ระบบ</p>
<?php endif; ?>
หรือปิดเฉพาะบางส่วนของหน้าเว็บ:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>เนื้อหาสำหรับผู้ใช้ทุกคน</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'เนื้อหาสำหรับผู้ใช้ที่เข้าสู่ระบบแล้วเท่านั้น';
}
?>
<p>เนื้อหาสำหรับผู้ใช้ทุกคน</p>
</body>
</html>
สมมติว่าในเว็บไซต์ของเรา นอกจากหน้า login.php แล้ว ยังมีหน้า 1.php, 2.php และ 3.php ด้วย ให้คุณทำให้มีเพียงผู้ใช้ที่เข้าสู่ระบบแล้วเท่านั้นที่สามารถเข้าถึงหน้าต่างๆ เหล่านี้ได้
สมมติว่าในเว็บไซต์ของเรามีหน้า index.php ด้วย ให้คุณทำให้บางส่วนของหน้านี้เปิดให้ผู้ใช้ทุกคน ในขณะที่บางส่วนเปิดให้เฉพาะผู้ใช้ที่เข้าสู่ระบบแล้ว
ปรับเปลี่ยนโค้ดของคุณให้เมื่อการรับรองความถูกต้องสำเร็จ จะมีการบันทึกชื่อผู้ใช้ลงในเซสชันด้วย
ทำให้เมื่อผู้ใช้เข้าสู่หน้าใดๆ ของเว็บไซต์ ผู้ใช้ที่เข้าสู่ระบบแล้วจะเห็นชื่อผู้ใช้ของตนเอง ส่วนผู้ใช้ที่ยังไม่ได้เข้าสู่ระบบจะเห็นลิงก์ไปยังหน้าเข้าสู่ระบบ