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 นั้นจะสามารถเก็บข้อมูลที่สำคัญของผู้ใช้โดยเฉพาะข้อมูลที่ต้องการรักษาความปลอดภัย เช่น username password

สิ่งสำคัญของ session สำหรับบทนี้คือ การที่มันมีตัว unique id ที่สามารถใช้ในการยืนยันตัวตนของผู้ใช้งาน เมื่อมีการ login ค้างไว้ในระบบ


การนำไปประยุกต์ใช้🚀

อย่างที่กล่าวไปข้างต้น ต่างฝ่ายต่างก็มีข้อดีเป็นของตัวเอง เเต่ด้วยความปลอดภัย เราจะไม่เก็บข้อมูลสำคัญไว้ที่ cookies ตรงๆ เเต่สิ่งที่จะเราจะเก็บไว้คือ session id 

ตัว session id จะถูกสร้างขึ้นมาเเละเก็บไว้ที่ฝั่ง server ที่หนึ่ง เเละอีกที่หนึ่งจะเก็บไว้ใน cookies เเล้วส่งไปที่ client เพื่อใช้สำหรับการยืนยันตัวตน อ่านไปก็งงๆใช่ไหมครับ ลองไปดูตัวอย่างกันดีกว่า

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

JWT.jpg

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

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

JWT (1).jpg

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

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

JWT (2).jpg

5. เมื่อนาย A ต้องการดูข้อมูลหน้า profile ของตัวเอง จะทำการส่ง request ไป พร้อม cookies ที่เก็บ session id ของนาย A ไว้ หลังจากนั้นตัว Web server จะทำการตรวจสอบความถูกต้องของ session id เเล้วทำการ decode  เพื่อส่งข้อมูลของหน้า profile ไปให้นาย A


สรุป

จบเเล้วนะครับ สำหรับขั้นตอนโดยเบื้องต้นสำหรับการยืนยันตัวตนด้วย session เเละ cookies เเต่วิธีนี้เองก็เป็นเเบบเก่า อาจจะมีปัญหาพวก performance เพราะต้องเก็บข้อมูลทั้ง server เเละ client ซึ่งมันมี request เยอะ เพราะตัว http มันเป็น stateless ที่ไม่จดจำพวกการยืนยันตัวตนให้เรา ดังนั้นเเล้ว เราจึงมีสิ่งที่เรียกว่า JWT หรือ Json Web Token ซึ่งเป็น token based authentication เข้ามาช่วยเเก้ไขปัญหาในส่วนนี้เองครับ งั้นอย่ารอช้า ไปเรียนบทต่อไปกันเลย!