เมื่อเว็บเซิร์ฟเวอร์ตอบกลับคำขอทรัพยากร เซิร์ฟเวอร์จะรวมส่วนหัว 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.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: คุกกี้