เมื่อคืนที่ผ่านมา หลังจากเลิกงานกลับถึงบ้าน อาบน้ำเสร็จว่าจะนอนสักหน่อย แต่เป็นธรรมเนียมประจำของผมที่จะต้องเปิดคอมดูอะไรก่อนสักนิดหน่อย ฆาตกรรมเวลาก่อนเข้านอน
ทีนี้ในเฟชบุ๊ก กลุ่มชมรมคนทำเว็บ (มีพี่เสือเป็นหัวหอก) คุยกันถึงเรื่องของคุ๊กกี้ ซึ่งผมเองก็ได้ลงสนามไปแจมกับเขาด้วย คุยไปคุยมายันเกือบตีหนึ่งกว่าจะได้นอน ผมเห็นว่าข้อมูลที่เราคุยกันเมื่อคืนเป็นประโยชน์อย่างยิ่งสำหรับน้องๆผู้ศึกษาใหม่ ที่ยังเข้าใจไม่กระจ่างเรื่องตัวแปร cookies ผมจึงมาเขียนบทความสรุปจากเรื่องที่เราคุยกันเมื่อคืนอีกที (เมื่อคืนเป็นเสวนาที่สนุกมาก)
<?php $value = "What's the fuck!" ; setcookie("TestCookie", $value); ?> <script type="text/javascript"> document.write(document.cookie); </script> ?> |
ดูคำสั่งนี้นะครับ ผมใช้ PHP กำหนดค่าเข้าไปในตัวแปร cookie ที่ชื่อ TestCookie จากนั้นผมใช้ภาษา javascript ปริ้นต์ตัวแปร cookie ทั้งหมดออกมาดู จะเห็นว่าตอนผมเขียนกำหนดค่าผมใช้ภาษา server side script แต่เวลาอ่านค่าผมใช้ภาษา client side script ซึ่งมันทำงานอยู่กันคนละฝั่งเลย
ทีนี้ลองดูผลลัพธ์ที่ผมลองรันสคริปต์ตัวนี้
มันมองเห็นกันและกัน ทั้งฝั่งเซิฟเวอร์และฝั่งไคลเอน (มีตัวแปรคุ๊กกี้ที่ถูกสร้างขึ้นอัตโนมัติติดมาด้วยหลายตัว)
หลักการทำงานเบื้องลึกที่ทำให้ทั้งสองฝั่งมองเห็นตัวแปรๆเดียวกันมันเป็นดังนี้ครับ
เบราเซอร์เมื่อเรียกดูหน้าเพจใดๆ มันจะไปหาดูก่อนว่ามีตัวแปรคุ๊กกี้สำหรับเว็บนั้นๆหรือไม่ ถ้ามีมันจะอ่านขึ้นมาแล้วแนบไปกับ header ส่งไปให้ทางเซิฟเวอร์ด้วย ถ้าหน้าเพจนั้นๆมีคำสั่งอ่านหรือเขียนคุ๊กกี้ มันก็จะทำตามนั้น พอรันคำสั่งหมดถึงบรรทัดสุดท้าย ก่อนส่งผลลัพธ์กลับไปให้เบราเซอร์ Apache (หรือ IIS) มันจะดูก่อนว่ามีตัวแปรคุ๊กกี้ที่เป็นของเว็บนี้มั้ย ถ้ามีมันจะอ่านขึ้นมาแล้วแนบไปกับ header
เมื่อเบราเซอร์ได้รับข้อมูลจากเซิฟเวอร์ มันจะดูก่อนว่ามีตัวแปรคุ๊กกี้หรือเปล่า ถ้ามีมันก็เอาเก็บไว้ จากนั้นจึงรัน HTML และ javascript ไปตามลำดับ เมื่อ javascript มีคำสั่งอ่านคุ๊กกี้ สิ่งที่มันแสดงออกมาจึงเป็นตัวแปรคุ๊กกี้ที่ถูกกำหนดมาโดยเซิฟเวอร์
ลองอ่านๆแล้วจินตนาการตามดูครับ
การสื่อสารกันระหว่างไคลเอนกับเซิฟเวอร์ มันคือการคุยกันระหว่าง firefox กับ apache แรกเริ่มเลยเมื่อคนพิมพ์ www.select2web.com แล้วกด enter ตอนเนี้ยหน้าที่ของคนหมดแล้ว firefox จะรับช่วงทำงานต่อ มัน จะรวบรวมข้อมูลเท่าที่จำเป็น อย่างคุ๊กกี้เป็นต้น แนบส่งไปให้ Apache ที่อยู่ทางโน้น และบอกไปด้วยว่า ผมต้องการดูหน้าเพจนี้ๆครับผม (ถ้าไม่มีระบุหน้าเพจ ทั้งสองคนนี้เขาตกลงกันไว้ก่อนหน้านั้นแล้วว่า แสดงว่าต้องการหน้า index) เมื่อ Apache ได้รับการร้องขอ มันก็วิ่งไปหาหน้านั้นๆ ขึ้นมาแล้วส่งกลับไปให้เบราเซอร์ (ตอนนี้มนุษย์ต้องนั่งรอไปก่อน) แต่ก่อนส่งมันก็ไม่ลืมที่จะไปดูว่ามีอะไรจำเป็นอย่างอื่นที่ต้องส่งไปด้วยมั้ย อย่างคุ๊กกี้เป็นต้น ถ้ามี มันก็แนบส่งไปด้วย จากนั้นก็ตัวใครตัวมัน
ถ้าจินตนาการให้ลึกลงไปกว่านั้นอีก เราจะมองเห็นภาพของ OSI 7 เลเยอร์ชัดเจนเลย
oakkrub says:
17/10/2555 at 17/10/2555
ขอบคุณมากมายครับผม