วันอาทิตย์ที่ 16 มีนาคม พ.ศ. 2568

[PHP] วิธีใช้ Session และ Cookie อย่างถูกต้อง

ถ้าเราพูดถึงการเก็บข้อมูลผู้ใช้บนเว็บ Session และ Cookie เป็นสองวิธีหลักที่ใช้กันบ่อยมาก แต่หลายคนอาจสงสัยว่า มันต่างกันยังไง? แล้ว ควรใช้ตอนไหน?

บทความนี้จะพาไปทำความเข้าใจ Session กับ Cookie แบบละเอียดสุด ๆ พร้อมตัวอย่างการใช้งาน ที่ถูกต้องและปลอดภัย

1. Session และ Cookie คืออะไร?

คุณสมบัติ Session Cookie
เก็บข้อมูลไว้ที่ไหน? ฝั่งเซิร์ฟเวอร์ ฝั่งเบราว์เซอร์ (Client-side)
อายุของข้อมูล หมดอายุเมื่อปิดเบราว์เซอร์ (ถ้าไม่กำหนดเวลา) กำหนดเวลาหมดอายุได้
ข้อมูลปลอดภัยแค่ไหน? ปลอดภัยกว่าเพราะไม่อยู่ในเครื่องผู้ใช้ มีโอกาสถูกแก้ไขได้
ใช้สำหรับอะไร? เก็บข้อมูลที่ต้องการให้ปลอดภัย เช่น การล็อกอิน เก็บค่าต่าง ๆ เพื่อให้ผู้ใช้สะดวกขึ้น เช่น จำการตั้งค่าของเว็บ
ส่งข้อมูลไปกับ HTTP Request ไหม? ไม่ ใช่ (Cookie จะถูกส่งไปกับทุก Request)


2. วิธีใช้ Session อย่างถูกต้อง

📌 เริ่มใช้งาน Session

ก่อนจะใช้งาน Session เราต้องเรียก session_start(); เสมอ

session_start(); // ต้องใส่เป็นบรรทัดแรกของไฟล์ PHP

📌 วิธีสร้างตัวแปรใน Session


$_SESSION['username'] = 'john_doe';
$_SESSION['role'] = 'admin';

📌 ดึงค่าจาก Session

session_start();
echo $_SESSION['username']; // john_doe

📌 วิธีลบค่า Session

ถ้าต้องการลบตัวแปร Session บางตัว

unset($_SESSION['username']); // ลบตัวแปร username

ถ้าต้องการลบทุกอย่าง (เช่น ตอน Logout)

session_destroy(); // ลบ Session ทั้งหมด

🔥 ข้อควรระวังในการใช้ Session

  •     ต้องเรียก session_start(); ก่อนเสมอ
  •     อย่าเก็บข้อมูลที่สำคัญเกินไป เช่น รหัสผ่าน ควรเก็บแค่ ID แล้วไปดึงข้อมูลจาก Database
  •     อย่าลืมลบ Session ที่ไม่จำเป็นเมื่อผู้ใช้ Logout


3. วิธีใช้ Cookie อย่างถูกต้อง

📌 การสร้าง Cookie

setcookie("user", "john_doe", time() + 3600, "/"); // หมดอายุใน 1 ชั่วโมง

📢 time() + 3600 หมายถึง 1 ชั่วโมง (60 วินาที x 60 นาที)

📌 การอ่านค่า Cookie

if(isset($_COOKIE['user'])) {
    echo "Welcome " . $_COOKIE['user'];
}

📌 การลบ Cookie

setcookie("user", "", time() - 3600, "/"); // ตั้งเวลาให้เป็นอดีต

🔥 ข้อควรระวังในการใช้ Cookie

  •     ข้อมูลใน Cookie ถูกแก้ไขได้ ควรเข้ารหัสก่อนเก็บ
  •     Cookie ถูกส่งไปกับทุก HTTP Request ทำให้เพิ่มภาระเซิร์ฟเวอร์
  •     อย่าเก็บข้อมูลสำคัญใน Cookie เช่น รหัสผ่าน


4. ควรใช้ Session หรือ Cookie ตอนไหน?

สถานการณ์ ควรใช้
ระบบล็อกอิน Session (ปลอดภัยกว่า)
จดจำการตั้งค่าของผู้ใช้ เช่น โหมดมืด Cookie
ติดตามการใช้งานเว็บ (Analytics) Cookie
เก็บข้อมูลชั่วคราวของผู้ใช้ในระหว่าง Session Session


5. เทคนิคเพิ่มความปลอดภัย

🔒 ป้องกัน Session Hijacking

session_regenerate_id(true); // เปลี่ยน Session ID ใหม่ ป้องกันการขโมย

🔒 ตั้งค่า Cookie ให้ปลอดภัย

setcookie("user", "john_doe", time() + 3600, "/", "", true, true);

✅ true, true หมายถึงเปิดใช้งาน Secure (HTTPS เท่านั้น) และ HttpOnly (กัน XSS)

6. สรุป

  •     Session เหมาะสำหรับเก็บข้อมูลชั่วคราวที่ต้องปลอดภัย เช่น การล็อกอิน
  •     Cookie เหมาะสำหรับจดจำข้อมูลระยะยาว เช่น การตั้งค่าเว็บ
  •     ต้อง เข้ารหัสข้อมูล และใช้ HttpOnly / Secure กับ Cookie เพื่อความปลอดภัย
  •     อย่าลืมล้าง Session และ Cookie ที่ไม่จำเป็นเพื่อป้องกันปัญหาความปลอดภัย

ไม่มีความคิดเห็น:

แสดงความคิดเห็น