คุกกี้คือข้อมูลส่วนเล็กๆ ที่จัดเก็บไว้ในเบราว์เซอร์ ซึ่งใช้เพื่อคงสถานะและข้อมูลอื่นๆ ที่เว็บไซต์ต้องใช้เพื่อเรียกใช้ฟีเจอร์ต่างๆ
คุกกี้คือไฟล์ขนาดเล็กที่เว็บไซต์จัดเก็บไว้ในเครื่องของผู้ใช้ โดยข้อมูลที่จัดเก็บไว้จะเดินทางไปมาระหว่างเบราว์เซอร์กับเว็บไซต์
คุกกี้แต่ละรายการเป็นคู่คีย์-ค่าพร้อมด้วยแอตทริบิวต์จำนวนหนึ่งที่ควบคุมเวลาและสถานที่ที่จะใช้คุกกี้ แอตทริบิวต์เหล่านี้ใช้เพื่อตั้งค่าต่างๆ เช่น วันหมดอายุ หรือระบุว่าควรส่งคุกกี้ผ่าน HTTPS เท่านั้น คุณสามารถตั้งค่าคุกกี้ในส่วนหัว HTTP หรือผ่านอินเทอร์เฟซ JavaScript
คุกกี้เป็นวิธีหนึ่งที่ใช้เพิ่มสถานะที่คงอยู่ให้กับเว็บไซต์ ความสามารถของคุกกี้เพิ่มขึ้นและพัฒนาไปตามกาลเวลา แต่ก็ทำให้แพลตฟอร์มมีปัญหาเดิมๆ ที่แก้ไขได้ยาก เบราว์เซอร์ (รวมถึง Chrome, Firefox และ Edge) จึงเปลี่ยนลักษณะการทำงานเพื่อบังคับใช้ค่าเริ่มต้นที่เน้นการปกป้องความเป็นส่วนตัวมากขึ้น
คุกกี้ในการทำงานจริง
สมมติว่าคุณมีบล็อกที่ต้องการแสดงโปรโมชัน "มีอะไรใหม่" ให้ผู้ใช้ ผู้ใช้สามารถปิดโปรโมชันและจะไม่เห็นโปรโมชันนั้นอีกสักระยะ คุณสามารถจัดเก็บค่ากำหนดดังกล่าวไว้ในคุกกี้ ตั้งค่าให้หมดอายุใน 1 เดือน (2,600,000 วินาที) และส่งผ่าน HTTPS เท่านั้น ส่วนหัวจะมีลักษณะดังนี้
Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Set-Cookie
เมื่อผู้อ่านดูหน้าเว็บที่ตรงตามข้อกำหนดดังกล่าว (ผู้อ่านใช้การเชื่อมต่อที่ปลอดภัยและคุกกี้มีอายุไม่เกิน 1 เดือน) เบราว์เซอร์ของผู้อ่านจะส่งส่วนหัวนี้ในคำขอ
Cookie: promo_shown=1
Cookie
นอกจากนี้ คุณยังเพิ่มและอ่านคุกกี้ที่พร้อมใช้งานสำหรับเว็บไซต์นั้นใน JavaScript ได้โดยใช้ document.cookie การกำหนดค่าให้กับ document.cookie จะสร้างหรือลบล้างคุกกี้ด้วยคีย์นั้น เช่น คุณลองใช้คำสั่งต่อไปนี้ในคอนโซล JavaScript ของเบราว์เซอร์ได้
→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"
การอ่าน document.cookie จะแสดงคุกกี้ทั้งหมดที่เข้าถึงได้ในบริบทปัจจุบัน โดยคุกกี้แต่ละรายการจะคั่นด้วยเครื่องหมายอัฒภาค
→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
document.cookie
หากคุณลองใช้คำสั่งนี้ในเว็บไซต์ยอดนิยมบางแห่ง คุณจะสังเกตเห็นว่าเว็บไซต์ส่วนใหญ่ตั้งค่าคุกกี้มากกว่า 3 รายการ ในกรณีส่วนใหญ่ ระบบจะส่งคุกกี้เหล่านั้นในทุกคำขอที่ส่งไปยังโดเมนนั้น ซึ่งส่งผลกระทบหลายอย่าง แบนด์วิดท์ในการอัปโหลดมักจะจำกัดมากกว่าการดาวน์โหลดสำหรับผู้ใช้ ดังนั้นค่าใช้จ่ายที่เพิ่มขึ้นในคำขอขาออกทั้งหมดจึงทำให้เกิดความล่าช้าในเวลาที่ใช้ในการรับข้อมูลไบต์แรก คุณจึงควรตั้งค่าคุกกี้ในจำนวนและขนาดที่เหมาะสม ใช้แอตทริบิวต์ Max-Age เพื่อช่วยให้มั่นใจว่าคุกกี้จะไม่คงอยู่ยาวนานเกินความจำเป็น
คุกกี้ของบุคคลที่หนึ่งและคุกกี้ของบุคคลที่สามคืออะไร
หากคุณกลับไปดูเว็บไซต์ที่เลือกไว้ก่อนหน้านี้ คุณอาจสังเกตเห็นว่ามีคุกกี้สำหรับโดเมนต่างๆ มากมาย ไม่ใช่แค่โดเมนที่คุณกำลังเข้าชม คุกกี้ที่ตรงกับโดเมนของเว็บไซต์ปัจจุบัน ซึ่งเป็นโดเมนที่แสดงในแถบที่อยู่ของเบราว์เซอร์ เรียกว่าคุกกี้ของบุคคลที่หนึ่ง ในทำนองเดียวกัน คุกกี้จากโดเมนอื่นที่ไม่ใช่เว็บไซต์ปัจจุบันเรียกว่าคุกกี้ของบุคคลที่สาม นี่ไม่ใช่ป้ายกำกับที่ตายตัว แต่ขึ้นอยู่กับบริบทของผู้ใช้ คุกกี้เดียวกันอาจเป็นคุกกี้ของบุคคลที่หนึ่งหรือคุกกี้ของบุคคลที่สามก็ได้ ขึ้นอยู่กับเว็บไซต์ที่ผู้ใช้เข้าชมในขณะนั้น
จากตัวอย่างก่อนหน้านี้ สมมติว่าบล็อกโพสต์หนึ่งมีรูปภาพแมวที่น่าทึ่งเป็นพิเศษและโฮสต์อยู่ที่ /blog/img/amazing-cat.png เนื่องจากเป็นรูปภาพที่น่าทึ่งมาก บุคคลอื่นจึงใช้รูปภาพนี้ในเว็บไซต์ของตนโดยตรง หากผู้เข้าชมเคยเข้าชมบล็อกของคุณและมีคุกกี้ promo_shown เมื่อผู้เข้าชมดู amazing-cat.png ในเว็บไซต์ของบุคคลอื่น ระบบจะส่ง คุกกี้นั้นในคำขอรูปภาพ ซึ่งไม่เป็นประโยชน์ต่อผู้ใดเนื่องจากเว็บไซต์ของบุคคลอื่นไม่ได้ใช้ promo_shown สำหรับสิ่งใดๆ แต่เป็นการเพิ่มค่าใช้จ่ายที่เพิ่มขึ้นให้กับคำขอ
หากเป็นผลลัพธ์ที่ไม่ต้องการ คุณจะทำเช่นนี้ไปทำไม กลไกนี้ช่วยให้เว็บไซต์คงสถานะไว้ได้เมื่อมีการใช้งานในบริบทของบุคคลที่สาม เช่น หากคุณฝังวิดีโอ YouTube ในเว็บไซต์ ผู้เข้าชมจะเห็นตัวเลือก "ดูภายหลัง" ในเพลเยอร์ หากผู้เข้าชมลงชื่อเข้าใช้ YouTube อยู่แล้ว ระบบจะทำให้เซสชันนั้นพร้อมใช้งานในเพลเยอร์ที่ฝังไว้โดยคุกกี้ของบุคคลที่สาม ซึ่งหมายความว่าปุ่ม "ดูภายหลัง" จะบันทึกวิดีโอในครั้งเดียวแทนที่จะแจ้งให้ผู้เข้าชมลงชื่อเข้าใช้หรือนำผู้เข้าชมออกจากหน้าเว็บของคุณและกลับไปที่ YouTube
คุณสมบัติทางวัฒนธรรมอย่างหนึ่งของเว็บคือการเปิดกว้างโดยค่าเริ่มต้น ซึ่งเป็นส่วนหนึ่งที่ทำให้ผู้คนจำนวนมากสร้างเนื้อหาและแอปของตนเองได้ อย่างไรก็ตาม การเปิดกว้างนี้ยังนำมาซึ่งข้อกังวลด้านความปลอดภัยและความเป็นส่วนตัวจำนวนมาก การโจมตีแบบ Cross-Site Request Forgery (CSRF) อาศัยข้อเท็จจริงที่ว่าระบบจะแนบคุกกี้กับคำขอแบบข้ามเว็บไซต์ที่ส่งไปยังต้นทางที่กำหนด ไม่ว่าใครจะเป็นผู้ส่งคำขอ เช่น หากคุณเข้าชม evil.example เว็บไซต์ดังกล่าวจะส่งคำขอไปยัง your-blog.example ได้ และเบราว์เซอร์จะแนบคุกกี้ที่เกี่ยวข้องอย่างเต็มใจ หากบล็อกของคุณไม่ระมัดระวังในการตรวจสอบคำขอเหล่านั้น evil.example อาจกระตุ้นให้เกิดการดำเนินการต่างๆ เช่น การลบโพสต์หรือการเพิ่มเนื้อหาของตนเอง
นอกจากนี้ ผู้ใช้ยังตระหนักมากขึ้นถึงวิธีที่เว็บไซต์ใช้คุกกี้เพื่อติดตามกิจกรรมของผู้ใช้ในเว็บไซต์ต่างๆ อย่างไรก็ตาม จนถึงขณะนี้ยังไม่มีวิธีระบุความตั้งใจของคุณเกี่ยวกับคุกกี้อย่างชัดเจน ระบบควรส่งคุกกี้ promo_shown ในบริบทของบุคคลที่หนึ่งเท่านั้น ในขณะที่คุกกี้เซสชันสำหรับวิดเจ็ตที่ตั้งใจจะฝังในเว็บไซต์อื่นๆ มีไว้เพื่อแสดงสถานะที่ลงชื่อเข้าใช้ในบริบทของบุคคลที่สาม
คุณสามารถระบุความตั้งใจเกี่ยวกับคุกกี้อย่างชัดเจนได้โดยการตั้งค่าแอตทริบิวต์ SameSite ที่เหมาะสม
หากต้องการระบุคุกกี้ของบุคคลที่หนึ่งและตั้งค่าแอตทริบิวต์ที่เหมาะสม โปรดดู สูตรคุกกี้ของบุคคลที่หนึ่ง