เมื่อเว็บเซิร์ฟเวอร์ตอบสนองต่อคำขอทรัพยากร เซิร์ฟเวอร์สามารถรวมส่วนหัว Set-Cookie ไว้ในการตอบสนองด้วย ส่วนหัวดังกล่าวจะบอกให้เบราว์เซอร์จัดเก็บคุกกี้
ตัวอย่างเช่น Set-Cookie:cat=tabby
นอกจากจะระบุชื่อและค่าคุกกี้แล้ว Set-Cookie ยังสามารถรวมแอตทริบิวต์เพื่อควบคุมว่าจะตั้งค่าคุกกี้หรือไม่ และคุกกี้จะหมดอายุเมื่อใด แอตทริบิวต์คุกกี้จะคั่นด้วยเครื่องหมายเซมิโคลอน เช่น
Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
เอกสารนี้อธิบายแอตทริบิวต์คุกกี้ที่สำคัญที่สุด
การใช้คุกกี้ HTTP จะอธิบายแอตทริบิวต์คุกกี้ในรายละเอียดทางเทคนิคมากขึ้น
Secure
หากส่วนหัว Set-Cookie มี Secure ระบบจะรวมคุกกี้ไว้กับคำขอที่เข้ารหัสซึ่งใช้โปรโตคอล HTTPS เท่านั้น โดยจะไม่รวมคุกกี้ไว้ในคำขอ HTTP ซึ่งจะช่วยหยุด
การโจมตีแบบคนกลาง (Man-in-the-middle)
ที่ผู้โจมตีจะเข้าแทรกแซงการสื่อสารระหว่าง
เบราว์เซอร์กับเซิร์ฟเวอร์อย่างลับๆ เพื่อส่งต่อข้อมูลและอาจเปลี่ยนแปลงข้อมูลดังกล่าว
HTTPOnly
หากส่วนหัว Set-Cookie มี HTTPOnly JavaScript จะเข้าถึงคุกกี้ไม่ได้ เช่น โดยใช้ document.cookie ซึ่งจะช่วยป้องกันการโจมตีบางประเภทที่กำหนดเป้าหมายไปที่คุกกี้
SameSite
คำขอทรัพยากรจากเว็บไซต์อื่นที่ไม่ใช่เว็บไซต์ที่คุณเข้าชมคือคำขอข้ามเว็บไซต์ คุกกี้ที่ตั้งค่าเพื่อตอบสนองต่อคำขอข้ามเว็บไซต์คือคุกกี้ของบุคคลที่สาม
แอตทริบิวต์ SameSite จะควบคุมว่าจะรวมคุกกี้ของบุคคลที่สามไว้ในคำขอหรือไม่ โดยมีค่าที่เป็นไปได้ 3 ค่า ได้แก่ Strict, Lax หรือ None
ดูข้อมูลเพิ่มเติมได้ที่คุกกี้ของบุคคลที่สามคืออะไร
Strict
ระบบจะส่งคุกกี้เพื่อตอบสนองต่อคำขอจากหน้าเว็บที่อยู่ในเว็บไซต์ต้นทางของคุกกี้เท่านั้น ตัวอย่างเช่น ลองนึกภาพว่าผู้ใช้เข้าชม cats.example และมีการตั้งค่าคุกกี้ด้วยแอตทริบิวต์ SameSite=Strict ต่อมาผู้ใช้เข้าชมเว็บไซต์อื่นและคลิกลิงก์ไปยังหน้าเว็บใน cats.example ระบบจะไม่รวมคุกกี้ที่ตั้งค่าไว้ในคำขอนั้น
Lax
แอตทริบิวต์นี้ทำงานในลักษณะเดียวกับ Strict ยกเว้นว่าเบราว์เซอร์จะรวมคุกกี้ไว้ด้วยเมื่อผู้ใช้คลิกลิงก์ไปยังเว็บไซต์ต้นทางของคุกกี้ (ในตัวอย่าง Strict ก่อนหน้านี้ ระบบ จะ รวมคุกกี้ไว้เมื่อผู้ใช้คลิกลิงก์ไปยัง cats.example) Lax เป็นค่าเริ่มต้นหากไม่มีแอตทริบิวต์ SameSite ในส่วนหัว Set-Cookie
None
ไม่มีข้อจำกัด โดยระบบจะรวมคุกกี้ไว้กับคำขอ ไม่ว่าจะเป็นคำขอข้ามเว็บไซต์หรือไม่ก็ตาม เมื่อใช้ SameSite=None คุกกี้ต้องมีแอตทริบิวต์ Secure ด้วย
Partitioned
แอตทริบิวต์นี้ช่วยให้คุณเลือกใช้คุกกี้สำหรับพื้นที่เก็บข้อมูลที่แบ่งพาร์ติชัน โดยมี "โหลคุกกี้" แยกกันสำหรับเว็บไซต์ระดับบนสุดแต่ละเว็บไซต์ ระบบจะใช้คีย์ 2 รายการสำหรับคุกกี้ ได้แก่ เว็บไซต์ระดับบนสุดและโดเมนที่ตั้งค่าคุกกี้
ตัวอย่างเช่น ลองนึกภาพว่าทั้งเว็บไซต์ ก. และเว็บไซต์ ข. มี iframe จากเว็บไซต์ ค. iframe ในเว็บไซต์ ข. จะเข้าถึงคุกกี้ที่แบ่งพาร์ติชันซึ่ง iframe ในเว็บไซต์ ก. ตั้งค่าไว้ไม่ได้ เนื่องจากคุกกี้ ก.ค. แยกจากคุกกี้ ข.ค.
คุกกี้ที่มีแอตทริบิวต์ Partitioned เรียกว่า CHIPS หรือ Cookies Having Independent Partitioned State
คุกกี้ที่แบ่งพาร์ติชันต้องมีแอตทริบิวต์ Secure
ดูข้อมูลเพิ่มเติมได้ที่ Cookies Having Independent Partitioned State
Expires และ Max-Age
คุณสามารถระบุวันที่และเวลา Expires หรือ Max-Age เป็นวินาที ซึ่งหลังจากนั้นระบบควรลบคุกกี้และไม่ส่งคุกกี้อีกต่อไป ตัวอย่างเช่น
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;Set-Cookie:cat=tabby; Max-Age=86400
หากไม่ระบุแอตทริบิวต์ Max-Age หรือ Expires ระบบจะลบคุกกี้เมื่อเซสชันปัจจุบันสิ้นสุดลง คุกกี้ประเภทนี้บางครั้งเรียกว่าคุกกี้เซสชัน
Domain
หากส่วนหัว Set-Cookie มีแอตทริบิวต์ Domain ระบบจะรวมคุกกี้ไว้กับคำขอที่ส่งไปยังโดเมนที่ระบุและโดเมนย่อยของโดเมนนั้น
หากส่วนหัว Set-Cookie ไม่มีแอตทริบิวต์ Domain ระบบจะไม่รวมคุกกี้ไว้กับคำขอที่ส่งไปยังโดเมนย่อย
กล่าวอีกนัยหนึ่งคือ การรวมแอตทริบิวต์ Domain จะเป็นการลด ข้อจำกัดของโดเมน
ตัวอย่างเช่น เมื่อมีการตอบสนองจากเว็บไซต์ cats.example
Set-Cookie:cat=tabby
ระบบจะรวมคุกกี้ไว้กับคำขอที่ส่งไปยังcats.exampleเท่านั้นSet-Cookie:cat=tabby; Domain=cats.example
ระบบจะรวมคุกกี้ไว้กับคำขอที่ส่งไปยังcats.exampleรวมถึงคำขอ ทรัพยากรในโดเมนย่อย เช่นfluffy.cats.exampleหรือuser.assets.cats.example
Path
หากรวมแอตทริบิวต์ Path ไว้ในส่วนหัวการตอบกลับ Set-Cookie ระบบจะรวมคุกกี้ที่ตั้งค่าไว้ในคำขอที่ส่งไปยัง URL (ในเว็บไซต์ที่ตั้งค่าคุกกี้!) ซึ่งตรงกับค่า Path เท่านั้น
ตัวอย่างเช่น
Set-Cookie:cat=tabby; Path=/articles
ระบบจะรวมคุกกี้ไว้สำหรับคำขอที่ส่งไปยังเส้นทาง URL ใดก็ตามที่ขึ้นต้นด้วย/articles:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.htmlSet-Cookie:cat=tabby; Path=/
คำขอทั้งหมดที่ส่งไปยัง URL ใดก็ตามในเว็บไซต์จะรวมคุกกี้ไว้ด้วย
หากส่วนหัวการตอบกลับ Set-Cookie ไม่มีค่า Path ระบบจะรวมคุกกี้ไว้กับคำขอที่ส่งไปยังไดเรกทอรีเดียวกันเท่านั้น ตัวอย่างเช่น ลองนึกภาพว่า
มีการตั้งค่าคุกกี้ cat=tabby เพื่อตอบสนองต่อคำขอ
cats.example/images/tabby.jpg. หากไม่ได้ตั้งค่า Path ระบบจะรวมคุกกี้ไว้กับคำขอที่ส่งไปยังไฟล์ภายในไดเรกทอรี cats.example/images เท่านั้น
การสาธิต
- 1pc.glitch.me: การสาธิตคุกกี้ของบุคคลที่หนึ่ง
- 3pc.glitch.me: การสาธิตคุกกี้ของบุคคลที่สาม
เครื่องมือ
- ดู เพิ่ม แก้ไข และลบคุกกี้ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome
- เครื่องมือวิเคราะห์ของ Privacy Sandbox
ดูข้อมูลเพิ่มเติม
- สูตรคุกกี้ของบุคคลที่หนึ่ง
- คุกกี้คืออะไร
- คุกกี้ของบุคคลที่สามคืออะไร
- คำขอและการตอบกลับ HTTP
- เครื่องมือคุกกี้
- การสาธิตคุกกี้
- การใช้คุกกี้ HTTP
- คำอธิบายเกี่ยวกับคุกกี้ SameSite
- OWASP: คุกกี้