Dark mode
Session คืออะไร
Session คำตอบสั้นๆ คือช่วงเวลาตั้งแต่เรา login จนถึง logout
ถ้าคำอธิบายเพิ่มเติมคือ => Session (เซสชัน) คือช่วงเวลาหรือการเชื่อมต่อชั่วคราวระหว่างผู้ใช้ (client) กับระบบหรือเซิร์ฟเวอร์ (server) เพื่อรักษาสถานะและข้อมูลของผู้ใช้ในระหว่างการใช้งานแอปพลิเคชัน เช่น การล็อกอินเข้าสู่เว็บไซต์หรือแอปพลิเคชัน โดยเซสชันจะช่วยให้ระบบ จดจำว่าผู้ใช้คนนั้นเป็นใคร และ มีข้อมูลอะไรบ้างที่เกี่ยวข้องกับผู้ใช้คนนั้นในระหว่างการโต้ตอบ
รูปแบบ Session หลักๆใน Web
1. Cookie-based Session
- เก็บ session id ใน cookie ฝั่ง client
- server มี storage mapping session id → user data (เช่น memory, redis, db)
- ใช้เยอะใน web app ทั่วไป
ตัวอย่างใน clack
ts
import { createSession } from 'clack/session'
const session = createSession({ store: 'memory' })
2. Token-based Session (JWT)
- สร้าง token (เช่น JWT) แล้วเก็บที่ client (localStorage, sessionStorage, cookie)
- user data ถูก encode ใน token ไม่ต้อง storage ฝั่ง server
- เหมาะกับระบบ stateless
ตัวอย่างใน supabase
ts
const { data, error } = await supabase.auth.signInWithPassword({ email, password })
// ได้ access_token (JWT)
3. OAuth/OpenID Connect Session
- ใช้สำหรับ third-party login (Google, Microsoft, ฯลฯ)
- ได้ token (access_token, id_token) จาก provider
- ใช้ร่วมกับ session/JWT ได้
ตัวอย่างใน workos
ts
const { profile, accessToken } = await workos.sso.getProfile({ code: 'auth_code' })
// ได้ accessToken (JWT)
4. Magic Link / Passwordless
- ส่ง link/code ไป email/phone user
- เมื่อคลิก link/กรอก code จะได้ session/token
- ไม่ต้องใช้ password
ตัวอย่างใน supabase
ts
const { data, error } = await supabase.auth.signInWithOtp({ email: '[email protected]' })