แอตทริบิวต์คุกกี้

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

แผนภาพแสดงว่าเว็บไซต์ 2 เว็บไซต์ที่แตกต่างกันซึ่งฝังบุคคลที่สามร่วมกันจะไม่แชร์คุกกี้สำหรับบุคคลที่สามนั้นอีกต่อไป
เมื่อใช้การแบ่งพาร์ติชันคุกกี้ บริการของบุคคลที่สามที่ตั้งค่าคุกกี้เมื่อฝังในเว็บไซต์ระดับบนสุดหนึ่งๆ จะไม่สามารถเข้าถึงคุกกี้เดียวกันนั้นได้เมื่อฝังบริการในเว็บไซต์ระดับบนสุดอื่นๆ

คุกกี้ที่มีแอตทริบิวต์ 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: การสาธิตคุกกี้ของบุคคลที่สาม

เครื่องมือ

ดูข้อมูลเพิ่มเติม