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

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

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

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

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

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

  1. คุณไม่สามารถระบุโดยอัตโนมัติว่าคุกกี้ถูกแบ่งพาร์ติชันหรือไม่ได้แบ่งพาร์ติชันหรือไม่ แต่คุณระบุสถานะที่แบ่งพาร์ติชันของคุกกี้ได้ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome
  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

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

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

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 อาจถูกยกเลิกและสามารถเพิ่มแอตทริบิวต์ที่แบ่งพาร์ติชันแล้วลงในคุกกี้การตรวจสอบสิทธิ์ปกติ