Skip to main content

Cookies and Session

Cookies🍪

Cookies คืออะไร? 

Cookies คือ ไฟล์ข้อความขนาดเล็กที่ทางฝั่งเว็บเซิฟเวอร์ทำการสร้างเเละส่งเข้ามาเก็บไว้ที่ web browser ของผู้ใช้งาน โดยมันจะเกิดขึ้นเมื่อผู้ใช้มีการเข้าไปรับชมเว็บไซต์ต่าง ๆ

ตัวอย่างของไฟล์ cookies

image.png

เเล้ว 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 จะถูกสร้างขึ้นมาเเละเก็บไว้ที่ฝั่ง Web server ที่หนึ่ง เเละอีกที่หนึ่งจะเก็บไว้ใน cookies เเล้วส่งไปที่ Client เพื่อใช้สำหรับการยืนยันตัวตน อ่านไปก็งง ๆ ใช่ไหมครับ ลองไปดูตัวอย่างกันดีกว่า

สถานการณ์จำลอง นาย A ได้ทำการ login ผ่านเว็บไซต์หนึ่ง เเล้วเขาต้องการที่จะดูข้อมูล personal profile ของตัวเขาเอง

JWT.jpg

1. นาย A ทำการส่ง login request (Authenticated request) ไปที่ Web server พร้อม ID เเละ Password

2. Web server ก็จะทำการนำค่าที่ได้ไปเช็คว่ามี ID เเละ Password นี้อยู่ใน Database จริงไหม

JWT (1).jpg

3. เมื่อพบว่ามีข้อมูลอยู่จริง ตัว Web server ก็จะทำการสร้าง session id ขึ้นมา พร้อมกับสร้าง cookies เพื่อเก็บ session id เเล้วส่งกลับไปยัง Client เพื่อไปเก็บใน browser

4. session id อีกอันหนึ่งส่งไปเก็บใน Database เพื่อใช้ยืนยันตัวตนสำหรับ request ในครั้งต่อ ๆ ไป

JWT (2).jpg

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 เข้ามาช่วยเเก้ไขปัญหาในส่วนนี้นั่นเองครับ