เมื่อเราสร้างเว็บแอปพลิเคชันที่มีระบบสมาชิก ไม่ว่าจะเป็นระบบลางานออนไลน์ (E-Permission) หรือระบบรับสมัครนักเรียน ล้วนต้องเผชิญกับข้อจำกัดทางธรรมชาติของโปรโตคอล HTTP ที่เป็นแบบ “Stateless” หรือการที่เซิร์ฟเวอร์จำไม่ได้ว่าใครเพิ่งคลิกเปลี่ยนหน้าเว็บไปเมื่อวินาทีที่แล้ว
เพื่อให้เซิร์ฟเวอร์จดจำผู้ใช้งานที่ล็อกอินเข้ามาได้ เราจึงต้องใช้เทคนิคการจำหน่วยความจำชั่วคราว ซึ่งมี 2 กลไกหลักที่ทำงานสอดประสานกัน คือ Cookie และ Session
1. Cookie: “บัตรประจำตัวจิ๋ว” ที่เก็บไว้ฝั่งผู้ใช้ (Client-Side)
Cookie คือไฟล์ข้อความขนาดเล็กที่เซิร์ฟเวอร์สั่งให้เบราว์เซอร์ (เช่น Chrome, Safari) สร้างและเก็บไว้ในเครื่องของผู้ใช้เอง
- หน้าที่หลัก: ใช้จดจำข้อมูลพื้นฐานที่ไม่เป็นความลับ เช่น ธีมสี (Dark Mode), ภาษาที่เลือก หรือสินค้าที่เคยหยิบใส่ตะกร้า
- จุดเด่น: ข้อมูลจะยังคงอยู่แม้ปิดเบราว์เซอร์ไปแล้ว (ตั้งเวลาหมดอายุได้) และทุกครั้งที่เบราว์เซอร์ร้องขอข้อมูลจากเซิร์ฟเวอร์ มันจะแนบ Cookie ตัวนี้ไปด้วยเสมอ
- จุดอ่อน: ถูกดักจับและแก้ไขได้ง่ายโดยผู้ใช้งานหรือแฮกเกอร์ จึงห้ามเก็บรหัสผ่านหรือข้อมูลส่วนตัวที่สำคัญไว้ใน Cookie เด็ดขาด
2. Session: “ตู้เซฟข้อมูล” ที่เก็บไว้ฝั่งเซิร์ฟเวอร์ (Server-Side)
Session คือพื้นที่จัดเก็บข้อมูลชั่วคราวที่สร้างขึ้นบนเครื่องเซิร์ฟเวอร์ (ตัวอย่างเช่น หากเขียนด้วย PHP เมื่อใช้คำสั่ง session_start() เซิร์ฟเวอร์จะสร้างไฟล์เก็บตัวแปร Session ไว้ที่ฝั่งหลังบ้านทันที)
- หน้าที่หลัก: เก็บข้อมูลที่ละเอียดอ่อนมากๆ เช่น รหัสผู้ใช้งาน (User ID), ระดับสิทธิ์ (Admin/User), และข้อมูลโปรไฟล์ส่วนตัว
- จุดเด่น: ปลอดภัยสูงมาก เพราะผู้ใช้งานไม่สามารถมองเห็น แก้ไข หรือยุ่งเกี่ยวกับข้อมูลที่อยู่ใน Session ได้เลย
- จุดอ่อน: กินทรัพยากรของเซิร์ฟเวอร์ และโดยปกติเมื่อผู้ใช้ปิดเบราว์เซอร์ (ปิดแท็บทั้งหมด) Session มักจะถูกลบทิ้งไป
ทั้งสองทำงานร่วมกันอย่างไรในระบบ Login?
ในการทำระบบยืนยันตัวตน (Authentication) ที่ปลอดภัย Cookie และ Session ไม่ได้แยกกันทำงาน แต่ต้องพึ่งพากันและกันตามกระบวนการนี้:
- ล็อกอิน: ผู้ใช้กรอก Username และ Password เซิร์ฟเวอร์นำไปเช็คกับฐานข้อมูล MySQL ว่าถูกต้อง
- สร้างตู้เซฟ: เซิร์ฟเวอร์ (เช่น PHP) สร้าง Session ขึ้นมาเพื่อเก็บข้อมูลสิทธิ์การเข้าถึง และสุ่มสร้างกุญแจรหัสยาวๆ ขึ้นมาหนึ่งตัวเรียกว่า Session ID
- ฝากกุญแจ: เซิร์ฟเวอร์ส่ง Session ID ตัวนี้กลับไปให้เบราว์เซอร์ โดยสั่งให้เก็บเอาไว้ใน Cookie (ใน PHP มักจะชื่อตัวแปรว่า
PHPSESSID) - เข้าใช้งานหน้าอื่น: เมื่อผู้ใช้คลิกไปหน้าถัดไป (เช่น เข้าสู่หน้า Dashboard อนุมัติการลา) เบราว์เซอร์จะแนบกุญแจ PHPSESSID นี้กลับไปหาเซิร์ฟเวอร์อัตโนมัติ
- ยืนยันสิทธิ์: เซิร์ฟเวอร์นำกุญแจไปไขดูตู้เซฟ (Session) ของตัวเอง ก็จะรู้ทันทีว่า “อ้อ คนนี้คือผู้ดูแลระบบที่ล็อกอินไว้เมื่อกี้นี้นี่เอง” และอนุญาตให้เข้าดูหน้าเว็บได้
| คุณสมบัติ | Cookie | Session |
| สถานที่จัดเก็บ | เครื่องผู้ใช้ (Browser) | เครื่องเซิร์ฟเวอร์ (Server) |
| ความปลอดภัย | ต่ำ (ผู้ใช้แก้เองได้) | สูงมาก (ผู้ใช้เข้าถึงไม่ได้) |
| ขนาดความจุ | น้อย (~4KB) | ไม่จำกัด (ขึ้นอยู่กับหน่วยความจำเซิร์ฟเวอร์) |
| อายุการใช้งาน | อยู่ได้นานตามที่ตั้งไว้ | มักจะหายไปเมื่อปิดเบราว์เซอร์ |
กุญแจสำคัญ: จำง่ายๆ ว่า Cookie ใช้เก็บกุญแจ (Session ID) ส่วน Session ใช้เก็บของมีค่า (ข้อมูล User) การทำความเข้าใจสองสิ่งนี้อย่างถ่องแท้ จะช่วยให้ออกแบบระบบ Web Application ที่มีโครงสร้างหลังบ้านแน่นหนาและปลอดภัย



