Coding Gun

Session vs Token

ในระบบที่ต้องมีการยืนยันตัวตน(Authentication) เราจำเป็นต้องมีวิธีเก็บสถานะของผู้ใช้ว่าได้ Login เข้ามาแล้วรึยัง ซึ่งจะมีอยู่ 2 วิธีหลักๆ ดังนี้

ในบทความนี้จะพาทุกท่านไปดูความแตกต่างระหว่าง Session และ Token เพื่อที่คุณจะได้เลือกใช้งานได้อย่างถูกต้อง


Session คืออะไร?

Session คือข้อมูลฝั่ง Server ที่ผูกกับผู้ใช้คนหนึ่ง หลังจากผู้ใช้ล็อกอินสำเร็จ ระบบจะสร้าง session ID ให้ และเก็บข้อมูลนี้ไว้ใน server ส่วน session ID จะถูกส่งไปเก็บที่ browser ของผู้ใช้ (ผ่าน cookie)

ตัวอย่างการทำงาน

  1. ผู้ใช้ล็อกอิน → server สร้าง session ID
  2. browser เก็บ session ID ไว้ใน cookie
  3. ทุกครั้งที่ส่ง request → browser ส่ง session ID ไปด้วย
  4. server ตรวจสอบ session ID เพื่อยืนยันตัวตน

ข้อดี

ข้อเสีย


Token คืออะไร?

Token โดยเฉพาะ JWT (JSON Web Token) คือข้อมูลยืนยันตัวตนที่สร้างหลังจากผู้ใช้ล็อกอิน และถูกฝังข้อมูลไว้ในตัว token เอง เช่น user ID, roles, expiration time เป็นต้น

Token จะถูกส่งกลับไปให้ client และ client จะเก็บไว้ (เช่น ใน localStorage หรือ sessionStorage) แล้วแนบ token นี้ไปกับทุก request (ใน header)

ตัวอย่างการทำงาน

  1. ผู้ใช้ล็อกอิน → server สร้าง token (JWT) และส่งให้ client
  2. client เก็บ token และส่งพร้อมทุก request ผ่าน HTTP header (เช่น Authorization: Bearer <token>)
  3. server ตรวจสอบและถอดรหัส token เพื่อตรวจสอบสิทธิ์

ข้อดี

ข้อเสีย


ตารางเปรียบเทียบ Session และ Token

หัวข้อ Session Token (JWT)
การเก็บข้อมูล เก็บที่ Server ฝังข้อมูลในตัว Token
การจัดการ Server ควบคุมได้ ต้องมีการวางแผนควบคุม (เช่น revoke)
การใช้งานกับ API ไม่เหมาะนัก (ต้องจัดการ cookie) เหมาะมาก โดยเฉพาะ RESTful API
การทำงานแบบ Distributed ต้องใช้ session store ร่วมกัน ไม่ต้อง แชร์ข้อมูลระหว่างเซิร์ฟเวอร์
ความปลอดภัย ปลอดภัยกว่า ถ้าใช้ HTTPS + Secure เสี่ยงหาก token รั่ว
ใช้งานกับ Mobile ไม่เหมาะ เหมาะ

แล้วควรเลือกแบบไหนดี?

สรุป

ทั้ง Session และ Token ต่างมีข้อดีข้อเสียในแบบของตัวเอง การเลือกใช้งานขึ้นอยู่กับประเภทของ Application และรูปแบบการสื่อสาร รวมทั้งการวางแผนด้านความปลอดภัยก็จะมีผลต่อการเลือกเช่นเดียวกัน

Phanupong Permpimol
Follow me