ตอนที่ 7: Workshop ระบบ Login และการตรวจสอบสิทธิ์ (Session)
สวัสดีครับนักเรียน มาถึงบทที่สำคัญที่สุดบทหนึ่งแล้ว! ต่อให้เว็บเราทำ CRUD เก่งแค่ไหน
ถ้าไม่มีระบบ Login → ใครก็เข้ามาแก้ข้อมูลได้หมด ถือว่ายังไม่ใช่ระบบจริง
บทนี้ครูจะพาทุกคนสร้างระบบที่เว็บไซต์แทบทุกแห่งต้องมี
- สมัครสมาชิก
- เข้าสู่ระบบ
- ล็อกหน้าเฉพาะสมาชิก
- ออกจากระบบ
วัตถุประสงค์ของ Workshop
- เก็บรหัสผ่านแบบปลอดภัยด้วย
password_hash() - ตรวจรหัสด้วย
password_verify() - ใช้
$_SESSIONจำสถานะ Login - ป้องกันคนแอบเข้าหน้าโดยตรง
1. เตรียมตารางสมาชิก
สิ่งที่ครูย้ำเสมอ
“ห้ามเก็บรหัสผ่านเป็นตัวอักษรธรรมดาเด็ดขาด”
ให้ช่อง password ยาวพอสำหรับ hash
ALTER TABLE users
MODIFY password VARCHAR(255) NOT NULL;
2. ระบบสมัครสมาชิก (register_process.php)
จุดสำคัญคือการเข้ารหัสรหัสผ่าน
<?php
require_once 'db_config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user = mysqli_real_escape_string($conn, $_POST['username']);
$pass = $_POST['password'];
// หัวใจความปลอดภัย
$hashed_password =
password_hash($pass, PASSWORD_DEFAULT);
$sql = "INSERT INTO users
(username, password)
VALUES
('$user', '$hashed_password')";
if (mysqli_query($conn, $sql)) {
echo "สมัครสมาชิกสำเร็จ!
<a href='login.php'>ไปหน้าเข้าสู่ระบบ</a>";
}
}
?>
ต่อให้ฐานข้อมูลหลุด แฮกเกอร์ก็อ่านรหัสจริงไม่ได้
3. ระบบ Login (login.php)
Session = ป้ายชื่อผู้ใช้ชั่วคราว
<?php
session_start(); // ต้องอยู่บนสุด!
require_once 'db_config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user = mysqli_real_escape_string($conn, $_POST['username']);
$pass = $_POST['password'];
$sql = "SELECT * FROM users
WHERE username = '$user'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
if ($row &&
password_verify($pass, $row['password'])) {
// จำว่าใครล็อกอินอยู่
$_SESSION['user_id'] = $row['id'];
$_SESSION['username'] = $row['username'];
header("Location: dashboard.php");
} else {
echo "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง";
}
}
?>
เด็กมักงง ทำไมไม่เทียบรหัสตรง ๆ?
เพราะ hash เปลี่ยนทุกครั้ง → ต้องใช้ verify เท่านั้น
4. หน้าสมาชิก (dashboard.php)
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
?>
<h1>
ยินดีต้อนรับคุณ
<?php echo $_SESSION['username']; ?>
</h1>
<a href="logout.php">ออกจากระบบ</a>
นี่คือ “ประตูยาม” ของเว็บเรา
5. Logout (logout.php)
<?php
session_start();
session_destroy();
header("Location: login.php");
exit();
?>
จุดที่ครูเจอเด็กพลาดบ่อย
- ลืมใส่ session_start()
- มีช่องว่างก่อน header()
- เทียบรหัสแบบ == แทน verify
- ลืม exit() หลัง redirect
แบบฝึกหัด
- มือโปรขึ้นอีกขั้น
สร้างไฟล์ check_auth.php
แล้ว require ทุกหน้าที่ต้องล็อก - ดึงข้อมูลส่วนตัว
ใช้ user_id จาก Session
ไป SELECT ข้อมูลจริง
สรุปจากครูส่งท้าย
ตอนนี้นักเรียนมีเว็บระดับใช้งานจริงแล้ว
- CRUD ครบ ✔
- Login ✔
- Session ✔
- Hash Password ✔
นี่คือพื้นฐานที่บริษัทใช้จริง ถ้าต่อยอดอีกนิดก็ทำโปรเจกต์จบได้สบายมาก
โปรแกรมเมอร์ไม่ได้เก่งเพราะจำได้ แต่เก่งเพราะ “ลงมือทำซ้ำ ๆ”
ภูมิใจในตัวเองได้เลยครับ
