การทำให้ Cookie หมดอายุตรงกับเวลาที่กำหนดจริงๆ
เคยมั้ย เวลาเราใช้ Cookie ในการเก็บข้อมูลต่างๆ เช่น ข้อมูลการ Login ปรากฏว่า Cookie มันหมดอายุทันทีที่สร้าง หรือ Cookie หมดอายุช้ากว่ากำหนด ทั้งๆที่เราก็เขียนโปรแกรมถูกต้องแล้ว เอ๊ะ...แล้วปัญหาเกิดจากอะไรหละ?
หากท่านยังไม่ทราบว่า Cookie คืออะไรลองกลับไปอ่าน บทความเครื่องการใช้งาน Cookie เบื้องต้น ดูก่อนนะครับ
เคยมั้ย เวลาเราใช้ Cookie ในการเก็บข้อมูลต่างๆ เช่น ข้อมูลการ Login ปรากฏว่า Cookie มันหมดอายุทันทีที่สร้าง หรือ Cookie หมดอายุช้ากว่ากำหนด ทั้งๆที่เราก็เขียนโปรแกรมถูกต้องแล้ว เอ๊ะ...แล้วปัญหาเกิดจากอะไรหละ?
ปัญหาคืออะไรกันแน่?
ปัญหาจริงๆ ก็คือเครื่องคอมพิวเตอร์ของผู้ใช้ตั้งเวลาไม่ตรง อาจจะเพี้ยนไปเป็นชั่วโมง หรือเป็นวันก็เป็นได้ บางคนนาฬิกาช้าไป 1 วัน ก็อาจจะทำให้ Cookie ที่เรากำหนดให้หมดอายุใน 1 ชั่วโมง ต้องเลื่อนไปเป็น 1 วันกับอีก 1 ชั่วโมง ซึ่งนั่นคงไม่ดีเป็นการแน่ แต่อีกกรณีนึงที่แย่กว่าก็คือ ผู้ใช้ตั้งเวลาไว้เร็วเกินไปหลายชั่วโมง ก็อาจจะทำให้ Browser ทำการลบ Cookie ที่เพิ่งจะถูกสร้างทิ้งไปทันที เนื่องจาก Browser พบว่า Cookie หมดอายุไปนานแล้ว (ทั้งๆ ที่จริงๆแล้ว เวลาของเครื่อง Client นั่นแล ที่ผิดพลาด)
วิธีแก้ปัญหา
ในบทความนี้ ผมขอสมมติว่าเรากำลังทำระบบ Login ละกันนะครับ แล้วเราจะอนุญาตให้ผู้ใช้ Login อยู่ได้นานไม่เกิน 3 ชั่วโมง แล้ว Cookie จะหมดอายุ ผู้ใช้จำเป็นต้องเข้าสู่ระบบใหม่
วิธีการแรก...เข้าใจง่าย
อาจใส่ข้อความไว้ในเว็บว่า "กรุณาตั้งนาฬิกาให้ตรงก่อนทำการเข้าสู่ระบบด้วยครับ" เท่านี้เอง ถ้าเป็นไปได้ก็อาจจะเอาเวลาของ Server มาแสดงให้ผู้ใช้ดูด้วย....ง่ายมั้ยครับ แค่นี้เอง...แต่....ถ้าเว็บไซต์ของคุณเป็นเว็บไซต์ธุรกิจที่ต้องการความน่าเชื่อถือ ทีนี้จะทำอย่างไร.....ลองไปดูวิธีการที่ 2 กันครับ
วิธีที่ 2 การอ้างอิงเวลาของ Server ในการทำให้ Cookie หมดอายุ
โดยปกติ เวลาเราจะกำหนด เวลาหมดอายุ เราจะกำหนด parameter ตัวที่ 3 ของคำสั่ง setcookie ใช่มั้ยครับ...แต่คราวนี้ เราจะตรวจสอบและทำให้ Cookie หมดอายุที่ Server เพราะงั้น จากนี้เราจะกำหนด ให้ parameter ตัวที่ 3 เป็นแบบนี้ใน Cookie ทุกๆ ตัว แทนนะครับ
setcookie( ชื่อ cookie, ค่าที่ต้องการบันทึก , time()+3600*24*365)
time()+3600*24*365 เป็นการกำหนดให้ Cookie มีอายุ 1 ปีนับจากวันนี้นั่นเองครับ ที่เราทำเช่นนี้เพราะเราไม่ต้องการให้ Browser มาทำให้ Cookie ของเราหมดอายุครับ เราจะทำเอง อิๆ
สิ่งแรกที่เราจะทำกันนะครับ คือ เราจะเก็บเวลาที่ควรหมดอายุ เมื่อเทียบกับเวลาของ Server นะครับ โดยใช้คำสั่งดังนี้ครับ
setcookie("valid_till", time()+อายุของ Cookie, time()+3600*24*365);
setcookie("คุกกี้ตัวอื่นที่ต้องการเก็บ", "value", time()+3600*24*365);
...
...อายุของ Cookie กำหนดในหน่วยวินาทีนะครับ หลังจากนั้นในทุกๆ หน้านะครับ เราต้องใส่ส่วนของโปรแกรมเพิ่มเติมเพื่อตรวจสอบว่า Cookie หมดอายุแล้วรึยัง ถ้าหมดอายุแล้วเราก็จะลบทิ้งให้
if ($_COOKIE["valid_till"] < time()) {
// cookie ตัวนี้ควรถูกลบแล้วครับ เพราะหมดอายุ
setcookie("valid_till", "", time()-3600); // ลบ cookie
// คุณควรใส่โค้ดในการลบ Cookie ตัวอื่นๆ ในบริเวณนี้ด้วยครับ
}ข้อควรทราบอื่นๆ
หากเราไม่กำหนด วันหมดอายุให้กับ Cookie แล้ว Cookie จะถูกลบออกเมื่อผู้ใช้ปิดหน้าต่างไปครับ
ในตอนต่อไปผมจะมาแนะนำถึงวิธีการตรวจสอบความถูกต้องของข้อมูลที่เก็บไว้ใน Cookie ครับ ว่า Cookie ถูกผู้ใช้ที่มีความรู้บ้าง แอบมาแก้ไขหรือไม่ครับ
Post new comment