• ติดตามบน
ตอนที่ 7: Workshop ระบบ Login พร้อมระบบตรวจสอบสิทธิ์ (Session Authentication)

ตอนที่ 7: Workshop ระบบ Login พร้อมระบบตรวจสอบสิทธิ์ (Session Authentication)

Chalothorn Kosakul 02-02-2026 42

ตอนที่ 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

แบบฝึกหัด

  1. มือโปรขึ้นอีกขั้น
    สร้างไฟล์ check_auth.php
    แล้ว require ทุกหน้าที่ต้องล็อก
  2. ดึงข้อมูลส่วนตัว
    ใช้ user_id จาก Session
    ไป SELECT ข้อมูลจริง

สรุปจากครูส่งท้าย

ตอนนี้นักเรียนมีเว็บระดับใช้งานจริงแล้ว

  • CRUD ครบ ✔
  • Login ✔
  • Session ✔
  • Hash Password ✔

นี่คือพื้นฐานที่บริษัทใช้จริง ถ้าต่อยอดอีกนิดก็ทำโปรเจกต์จบได้สบายมาก

โปรแกรมเมอร์ไม่ได้เก่งเพราะจำได้ แต่เก่งเพราะ “ลงมือทำซ้ำ ๆ”

ภูมิใจในตัวเองได้เลยครับ

แท็กที่เกี่ยวข้อง :

แชร์บทความนี้