July 4, 2012

PHP: Session และสิ่งที่แตกต่างจาก Cookie

ในการเขียนโปรแกรมทั่ว ๆ ไป เราสามารถเก็บข้อมูลของผู้ใช้ เช่น ชื่อ ข้อมูลของแต่ละขั้นตอนที่ผู้ใช้ได้ทำลงไปในตัวแปรแบบปกติได้ แต่สำหรับการเขียนโปรแกรมสำหรับเว็บนั้นทำแบบนั้นไม่ได้ เพราะ URL ไม่สามารถบ่งบอกตัวผู้ใช้ และไม่สามารถเก็บข้อมูลตัวแปรได้ (ยกเว้นจะใช้ GET ซึ่งไม่ปลอดภัยสักเท่าไหร่ เพราะถ้ามีใครรู้ URL ก็สามารถปลอมตัวเป็นคน ๆ นั้นได้ มันคงไม่สนุก ถ้าเขาปลอมเป็นเรา แล้วโอนเงินในธนาคารออกไปจนหมด) PHP จึงสร้างตัวแปรพิเศษขึ้นมาคือ session

session ต่างจากตัวแปรปกติตรงที่ เมื่อจบการประมวลผล ค่าของมันจะไม่ถูกทำลายเหมือนตัวแปรปกติ แต่จะถูกทำลายเมื่อผู้ใช้ออกจากเว็บแทน

จะใช้ session ต้องประกาศก่อน และต้องทำก่อนที่จะส่งข้อมูลใด ๆ ออกมา ไม่ใช่นั้นจะเจอข้อความ headers already sent เวลาเรียกใช้ก็เรียกใช้เหมือนอาเรย์ปกติ ผ่านทางตัวแปร $_SESSION ซึ่งเป็นตัวแปรชนิด superglobal หากต้องการลบค่านั้นออกจาก session สามารถสั่ง unset ทีละตัวหรือทำลาย session นั้นทิ้งไปเลยก็ได้ แต่ถึงจะไม่ทำลาย ถ้าผู้ใช้ออกจากเว็บข้อมูลใน session ก็ถูกทำลายอยู่ดี โดยทั่วไปแล้ว session จะคล้าย ๆ กับ cookie คือเก็บข้อมูลของผู้ใช้ไว้เหมือน ๆ กัน ต่างกันตรงที่ว่า
  • cookie จะส่งข้อมูลนั้นกลับเป็นไฟล์ไปยังเบราว์เซอร์ และเก็บไว้ที่ฝั่งผู้ใช้ด้วย แต่ session ส่ง UID ของ session ไปอย่างเดียว ข้อมูลยังอยู่ฝั่งเซิฟเวอร์
  • cookie เก็บข้อมูลไว้เป็นไฟล์ข้อความธรรมดา สามารถเปิดขึ้นมาแก้ไขได้ หากรู้วิธี
  • cookie จะยังคงอยู่แม้ว่าจะออกจากเว็บไปแล้ว (เพราะเก็บอยู่บนเครื่องผู้ใช้) เมื่อกลับเข้ามาใหม่ ก็สามารถเรียกใช้ข้อมูลเหล่านั้นได้อยู่
  • หากต้องการเก็บข้อมูลใน session เอาไว้ ต้องเขียนลงไฟล์ หรือฐานข้อมูลเอาเอง

No comments:

Post a Comment