เมื่อเว็บเซิร์ฟเวอร์ตอบกลับคำขอทรัพยากร เซิร์ฟเวอร์จะรวมส่วนหัว Set-Cookie
ไว้ในการตอบกลับได้ ส่วนหัวดังกล่าวจะบอกให้เบราว์เซอร์
จัดเก็บคุกกี้ ตัวอย่างเช่น Set-Cookie:cat=tabby
คุกกี้คืออะไร อธิบายวิธีการทำงานของคุกกี้
นอกเหนือจากการระบุชื่อและค่าคุกกี้แล้ว Set-Cookie
ยังสามารถรวมแอตทริบิวต์เพื่อควบคุมว่าจะตั้งค่าคุกกี้หรือไม่ และเมื่อคุกกี้หมดอายุ โดยคั่นแอตทริบิวต์คุกกี้ด้วยเครื่องหมายเซมิโคลอน เช่น
Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
เอกสารนี้อธิบายแอตทริบิวต์คุกกี้ที่สำคัญที่สุด
การใช้คุกกี้ HTTP อธิบายแอตทริบิวต์คุกกี้ในรายละเอียดทางเทคนิคเพิ่มเติม
แบบปลอดภัย
หากส่วนหัว Set-Cookie
มี Secure
ระบบจะรวมคุกกี้เฉพาะกับคำขอที่เข้ารหัสซึ่งใช้โปรโตคอล HTTPS เท่านั้น โดยจะไม่รวมคุกกี้ในคำขอ HTTP ซึ่งจะช่วยหยุดการโจมตีแบบคนกลาง
ที่ผู้โจมตีแอบแทรกแซงการสื่อสารระหว่างเบราว์เซอร์กับเซิร์ฟเวอร์
เพื่อส่งต่อข้อมูลและอาจเปลี่ยนแปลงข้อมูลนั้น
HTTPOnly
หากส่วนหัว Set-Cookie
มี HTTPOnly
JavaScript จะเข้าถึงคุกกี้ไม่ได้ เช่น โดยใช้ document.cookie
ซึ่งจะช่วยป้องกันการโจมตีบางประเภท
ที่กำหนดเป้าหมายเป็นคุกกี้
SameSite
คำขอทรัพยากรจากเว็บไซต์ที่แตกต่างจากเว็บไซต์ที่คุณกำลังเข้าชมคือคำขอข้ามเว็บไซต์ คุกกี้ที่ตั้งค่าเพื่อตอบสนองต่อคำขอข้ามเว็บไซต์ คือคุกกี้ของบุคคลที่สาม
แอตทริบิวต์ SameSite
ควบคุมว่าจะรวมคุกกี้ของบุคคลที่สามไว้ในคำขอหรือไม่
โดยมีค่าที่เป็นไปได้ 3 ค่า ได้แก่ Strict
, Lax
หรือ None
ดูข้อมูลเพิ่มเติม: คุกกี้ของบุคคลที่สามคืออะไร
เข้มงวด
ระบบจะส่งคุกกี้ในการตอบกลับคำขอจากหน้าเว็บที่อยู่ในเว็บไซต์ต้นทางของคุกกี้เท่านั้น ตัวอย่างเช่น สมมติว่าผู้ใช้เข้าชม cats.example
และมี
คุกกี้ที่ตั้งค่าด้วยแอตทริบิวต์ SameSite=Strict
ต่อมาผู้ใช้เข้าชมเว็บไซต์อื่นและคลิกลิงก์ไปยังหน้าเว็บใน cats.example
ระบบจะไม่รวมคุกกี้
ที่ตั้งค่าไว้ในคำขอดังกล่าว
LAX
โดยจะทำงานในลักษณะเดียวกับ Strict
เพียงแต่เบราว์เซอร์จะรวมคุกกี้ด้วยเมื่อผู้ใช้คลิกลิงก์ไปยังเว็บไซต์ต้นทางของคุกกี้ (ในตัวอย่าง Strict
ก่อนหน้า ระบบจะรวมคุกกี้เมื่อผู้ใช้คลิกลิงก์ไปยัง cats.example
) Lax
เป็นค่าเริ่มต้น หากไม่มีแอตทริบิวต์ SameSite
ในส่วนหัว Set-Cookie
ไม่มี
ไม่มีข้อจำกัด: ระบบจะรวมคุกกี้ไว้ในคำขอ ไม่ว่าจะเป็นแบบข้ามเว็บไซต์หรือไม่ก็ตาม เมื่อใช้ SameSite=None
คุกกี้ต้องมีแอตทริบิวต์ Secure
ด้วย
แบ่งพาร์ติชันแล้ว
แอตทริบิวต์นี้ช่วยให้คุณเลือกใช้คุกกี้ในพื้นที่เก็บข้อมูลที่แบ่งพาร์ติชัน โดยมี "กระปุกคุกกี้" แยกต่างหากต่อเว็บไซต์ระดับบนสุด คุกกี้จะได้รับการคีย์ 2 ครั้งโดยเว็บไซต์ระดับบนสุด รวมถึงโดเมนที่ตั้งค่าคุกกี้
ตัวอย่างเช่น สมมติว่าเว็บไซต์ ก และเว็บไซต์ ข มี iframe จาก เว็บไซต์ ค iframe ในเว็บไซต์ A ไม่สามารถเข้าถึงคุกกี้ที่แบ่งพาร์ติชันซึ่งตั้งค่าโดย iframe ในเว็บไซต์ B ได้ เนื่องจากคุกกี้ AC แยกจากคุกกี้ BC

คุกกี้ที่มีแอตทริบิวต์ Partitioned
เรียกว่า CHIPS ซึ่งย่อมาจาก Cookies Having Independent Partitioned State
คุกกี้ที่แบ่งพาร์ติชันต้องมีแอตทริบิวต์ Secure
ดูข้อมูลเพิ่มเติมได้ที่ Cookies Having Independent Partitioned State
Expires และ Max-Age
คุณระบุExpires
วันที่และเวลาExpires
หรือMax-Age
ระยะเวลาเป็นวินาที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
ระบบจะลบคุกกี้เมื่อเซสชันปัจจุบันสิ้นสุดลง คุกกี้ประเภทนี้บางครั้งเรียกว่าคุกกี้เซสชัน
โดเมน
หากส่วนหัว 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
ในส่วนหัวของการตอบกลับ 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.html
Set-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: คุกกี้