Cookies and Session
Cookies🍪
Cookies คืออะไร?
ตัวอย่างของไฟล์ cookies
เเล้ว cookies เนี่ยใช้เก็บอะไร?
- เก็บ config ของ website นั้น ๆ
- ข้อมูลทั่วไปของผู้ใช้งานเช่น ตำเเหน่งที่อยู่ของผู้ใช้งาน
- ข้อมูลพฤติกรรมของผู้ใช้งานในเชิงของการซื้อขาย เพื่อที่จะเอาข้อมูลมาทำการตลาด
เเต่ที่ตัวที่สำคัญจริงๆต่อบทนี้ก็คือการเก็บ session id นั่นเอง เเล้ว session คืออะไรล่ะ?
Session📄
Session คืออะไร?
Session คือ การเก็บข้อมูลชั่วคราวทั้งในรูปเเบบของ json เเละ array ที่ถูกสร้างขึ้นมาเเล้วเก็บไว้ที่ฝั่ง web server โดยตัวของ session นั้นจะสามารถเก็บข้อมูลการยืนยันตัวตนของผู้ใช้ซึ่งก็คือ session id
โดยทางฝั่ง web server จะสามารถเก็บ session data ได้ก็จริง เเต่ใน client เราจำเป็นที่จะต้องเก็บ session id ไว้ใน cookies เพื่อ implement ให้ session ใช้งานได้บน http สิ่งสำคัญของ session สำหรับบทนี้คือ การที่มันมีตัว unique id (session id) ที่สามารถใช้ในการยืนยันตัวตนของผู้ใช้งาน เมื่อมีการ login ค้างไว้ในระบบ
การนำไปประยุกต์ใช้🚀
อย่างที่กล่าวไปข้างต้น ต่างฝ่ายต่างก็มีข้อดีเป็นของตัวเอง เเต่ด้วยความปลอดภัย เราจะไม่เก็บข้อมูลสำคัญไว้ที่ cookies ตรง ๆ เเต่สิ่งที่จะเราจะเก็บไว้คือ session id
ตัว session id จะถูกสร้างขึ้นมาเเละเก็บไว้ที่ฝั่ง server ที่หนึ่ง เเละอีกที่หนึ่งจะเก็บไว้ใน cookies เเล้วส่งไปที่ client เพื่อใช้สำหรับการยืนยันตัวตน อ่านไปก็งง ๆ ใช่ไหมครับ ลองไปดูตัวอย่างกันดีกว่า
สถานการณ์จำลอง นาย A ได้ทำการ login ผ่านเว็บไซต์หนึ่ง เเล้วเขาต้องการที่จะดูข้อมูล personal profile ของตัวเขาเอง
1. นาย A ทำการส่ง login request (Authenticated request) ไปที่ webserver พร้อม ID เเละ Password
2. Webserver ก็จะทำการนำค่าที่ได้ไปเช็คว่ามี ID เเละ Password นี้อยู่ใน Database จริงไหม
3. เมื่อพบว่ามีข้อมูลอยู่จริง ตัว Web server ก็จะทำการสร้าง session id ขึ้นมา พร้อมกับสร้าง cookies เพื่อเก็บ session id เเล้วส่งกลับไปยัง client เพื่อไปเก็บใน browser
4. session id อีกอันหนึ่งส่งไปเก็บใน Database เพื่อใช้ยืนยันตัวตนสำหรับ request ในครั้งต่อ ๆ ไป
5. เมื่อนาย A ต้องการดูข้อมูลหน้า profile ของตัวเอง จะทำการส่ง request ไป พร้อม cookies ที่เก็บ session id ของนาย A ไว้ หลังจากนั้นตัว Web server จะทำการตรวจสอบความถูกต้องของ session id เเล้วทำการส่งข้อมูลของหน้า profile ไปให้นาย A
สรุป
สำหรับขั้นตอนโดยเบื้องต้นของการยืนยันตัวตนด้วย session เเละ cookies ก็จะประมาณนี้ เเต่วิธีนี้เองก็เป็นเเบบเก่า อาจจะมีปัญหาพวก performance เพราะ ต้องเก็บข้อมูลทั้ง server เเละ client ซึ่งมันต้องรับ request เยอะ เพราะตัว http มันเป็น stateless ที่ไม่จดจำพวกการยืนยันตัวตนให้เรา ดังนั้นเเล้ว เราจึงมีสิ่งที่เรียกว่า JWT หรือ Json Web Token ซึ่งเป็น token-based authentication เข้ามาช่วยเเก้ไขปัญหาในส่วนนี้นั่นเองครับ