การเปลี่ยนจากคุกกี้ที่ไม่ได้แบ่งพาร์ติชันไปใช้คุกกี้ที่แบ่งพาร์ติชันแล้ว

เมื่อเปลี่ยนเว็บไซต์เป็นคุกกี้ที่แบ่งพาร์ติชัน คุณอาจพบลักษณะการทำงานที่ไม่คาดคิดหากมีทั้งคุกกี้ที่แบ่งพาร์ติชันและไม่ได้แบ่งพาร์ติชันที่มีชื่อเดียวกันสําหรับไคลเอ็นต์หนึ่งๆ

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

ปัญหานี้แก้ไขได้ 2 วิธี ดังนี้ 1. คุกกี้ที่คุณกำลังแทนที่หมดอายุ 2. เปลี่ยนชื่อคุกกี้

สิ่งสำคัญที่ควรพิจารณา

โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อเปลี่ยนไปใช้คุกกี้ที่มีการแบ่งพาร์ติชัน

  1. ไม่สามารถระบุแบบเป็นโปรแกรมได้ว่าคุกกี้ที่ส่งในคําขอ HTTP มีการแบ่งพาร์ติชันหรือไม่ อย่างไรก็ตาม คุณสามารถกำหนดสถานะการแบ่งพาร์ติชันของคุกกี้ได้ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome คุณแยกความแตกต่างระหว่างคุกกี้ที่แบ่งพาร์ติชันและไม่แบ่งพาร์ติชันที่ไม่มีแอตทริบิวต์ HttpOnly ได้โดยใช้ CookieStore API
  2. คุกกี้ที่มีการแบ่งพาร์ติชันจะไม่เขียนทับคุกกี้ที่ไม่ได้แบ่งพาร์ติชัน คุกกี้ 2 รายการที่เหมือนกันทุกประการ (นั่นคือมีแอตทริบิวต์เดียวกัน เช่น ชื่อ โดเมน หรือเส้นทาง) จะถือว่าเป็นคนละคุกกี้กันหากมีเพียงรายการเดียวที่มีแอตทริบิวต์ Partitioned
  3. วิธีที่ดีที่สุดคือการหลีกเลี่ยงสถานการณ์ที่คุณมีทั้งคุกกี้ที่แบ่งพาร์ติชันแล้ว และคุกกี้ที่ไม่ได้แบ่งพาร์ติชันโดยใช้ชื่อเดียวกันซึ่งส่งคืนในการเรียกใช้เครือข่ายเดียวกัน

ทำให้คุกกี้ที่จะแทนที่หมดอายุ

หากเว็บไซต์หรือบริการของคุณไม่รองรับการเปลี่ยนแปลงชื่อ คุณสามารถสร้างคุกกี้ที่มีการแบ่งพาร์ติชันใหม่ในขณะที่ทำให้คุกกี้ที่ไม่ได้แบ่งพาร์ติชันที่มีอยู่หมดอายุ แม้ว่าจะยังไม่มีวิธีตรวจสอบว่าคุกกี้ได้รับการแบ่งพาร์ติชันหรือไม่ แต่ส่วนหัว Set-Cookie ที่มีแอตทริบิวต์ Partitioned จะไม่ส่งผลต่อคุกกี้ที่ไม่ได้แบ่งพาร์ติชัน

ตัวอย่างต่อไปนี้แสดงวิธีทำให้คุกกี้ที่ไม่ได้แบ่งพาร์ติชันชื่อ example หมดอายุและปล่อยคุกกี้ที่แบ่งพาร์ติชันไว้ให้ไม่ได้รับผลกระทบ แม้ว่าจะมีชื่อเดียวกันก็ตาม ระบบจะเพิ่มหรืออัปเดตคุกกี้ที่แบ่งพาร์ติชันใหม่ชื่อ cookieName หากมีอยู่แล้ว

Set-Cookie: example=-1;HttpOnly;SameSite=None;Secure;Max-Age:0
Set-Cookie: cookieName=value;Secure;SameSite=None;MaxAge=34560000;Partitioned

เปลี่ยนชื่อคุกกี้

วิธีที่ดีที่สุดในการช่วยให้การเปลี่ยนผ่านเป็นไปอย่างราบรื่นคือการใช้ชื่อที่แตกต่างกันสําหรับคุกกี้ที่มีการแบ่งพาร์ติชันและไม่ได้แบ่งพาร์ติชัน ตัวอย่างเช่น หากมีคุกกี้ที่ไม่ได้แบ่งพาร์ติชันชื่อ "example" คุณสามารถย้ายข้อมูลไปยังคุกกี้ที่แบ่งพาร์ติชันได้

Set-Cookie: example-partitioned=value;Secure;SameSite=None;MaxAge=34560000;Partitioned

เนื่องจากวันหมดอายุของคุกกี้ไม่ได้แสดงผลแบบเป็นโปรแกรม จึงไม่มีวิธีตั้งค่าการหมดอายุของคุกกี้ใหม่ให้ตรงกับวันหมดอายุของคุกกี้ที่ไม่ได้แบ่งพาร์ติชัน คุณอาจต้องรีเฟรชค่าของคุกกี้ในระหว่างกระบวนการนี้

ดูแลรักษาทั้งคุกกี้ที่แบ่งพาร์ติชันและไม่ได้แบ่งพาร์ติชัน

ในช่วงเปลี่ยนผ่าน ให้พิจารณาคงคุกกี้ที่ซิงค์ไว้ 2 รายการแยกกัน นั่นคือ คุกกี้ที่มีการแบ่งพาร์ติชันและคุกกี้ที่ไม่ได้แบ่งพาร์ติชัน ตัวอย่างเช่น คุณอาจมีทั้งคุกกี้ auth และ auth-partitioned ซึ่งตั้งค่ารายการหลังด้วยแอตทริบิวต์ Partitioned

ทุกครั้งที่มีการอัปเดตค่า คุณควรพยายามตั้งค่าคุกกี้ทั้งสอง

  • ในไคลเอ็นต์ที่บล็อกคุกกี้ของบุคคลที่สามแต่ยังไม่รองรับ CHIPS ระบบจะไม่ยอมรับคุกกี้ใดเลย
  • ในไคลเอ็นต์ที่บล็อกคุกกี้ของบุคคลที่สามและรองรับ CHIPS: ระบบจะปฏิเสธคุกกี้ auth แต่ยอมรับคุกกี้ auth-partitioned
  • ในไคลเอ็นต์ที่ไม่บล็อกคุกกี้ของบุคคลที่สาม ไม่ว่าจะรองรับ CHIPS หรือไม่ก็ตาม ระบบจะยอมรับทั้ง auth และ auth-partitioned

เมื่อแอปพลิเคชันจำเป็นต้องอ่านคุกกี้การตรวจสอบสิทธิ์ คุณควรมองหา auth-partitioned ก่อน แต่หากจำเป็นต้องย้อนกลับการเปลี่ยนแปลงชั่วคราว คุณก็กลับไปมองหาคุกกี้ auth ได้

เมื่อคุณทราบแล้วว่าผู้ใช้ส่วนใหญ่รีเฟรชคุกกี้แล้ว ระบบจะเลิกใช้คุกกี้ auth-partitioned และอาจเพิ่มแอตทริบิวต์ที่แบ่งพาร์ติชันแล้วลงในคุกกี้การตรวจสอบสิทธิ์ปกติ