เมื่อเปลี่ยนเว็บไซต์เป็นคุกกี้ที่แบ่งพาร์ติชัน คุณอาจพบลักษณะการทำงานที่ไม่คาดคิดหากมีทั้งคุกกี้ที่แบ่งพาร์ติชันและไม่ได้แบ่งพาร์ติชันที่มีชื่อเดียวกันสําหรับไคลเอ็นต์หนึ่งๆ
การตั้งค่าคุกกี้ที่แบ่งพาร์ติชันแล้วจะไม่ลบล้างหรือแทนที่คุกกี้ปัจจุบันที่ไม่ได้แบ่งพาร์ติชันด้วยชื่อเดียวกัน ทั้ง 2 อย่างจะยังคงอยู่ตราบใดที่คุกกี้ของบุคคลที่สามถูกเปิดใช้ แต่อยู่ในโหลคุกกี้แยกกัน เมื่อปิดใช้คุกกี้ของบุคคลที่สาม ระบบจะยอมรับเฉพาะคุกกี้ที่แบ่งพาร์ติชันแล้ว หากมีคุกกี้ทั้ง 2 รายการ โปรแกรมจะไม่สามารถบอกได้ว่าคุกกี้ใดมีการแบ่งพาร์ติชันและคุกกี้ใดไม่ได้ ซึ่งอาจทําให้เกิดความผิดปกติ
ปัญหานี้แก้ไขได้ 2 วิธี ดังนี้ 1. คุกกี้ที่คุณกำลังแทนที่หมดอายุ 2. เปลี่ยนชื่อคุกกี้
สิ่งสำคัญที่ควรพิจารณา
โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อเปลี่ยนไปใช้คุกกี้ที่มีการแบ่งพาร์ติชัน
- ไม่สามารถระบุแบบเป็นโปรแกรมได้ว่าคุกกี้ที่ส่งในคําขอ HTTP มีการแบ่งพาร์ติชันหรือไม่ อย่างไรก็ตาม คุณสามารถกำหนดสถานะการแบ่งพาร์ติชันของคุกกี้ได้ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome คุณแยกความแตกต่างระหว่างคุกกี้ที่แบ่งพาร์ติชันและไม่แบ่งพาร์ติชันที่ไม่มีแอตทริบิวต์
HttpOnly
ได้โดยใช้ CookieStore API - คุกกี้ที่มีการแบ่งพาร์ติชันจะไม่เขียนทับคุกกี้ที่ไม่ได้แบ่งพาร์ติชัน คุกกี้ 2 รายการที่เหมือนกันทุกประการ (นั่นคือมีแอตทริบิวต์เดียวกัน เช่น ชื่อ โดเมน หรือเส้นทาง) จะถือว่าเป็นคนละคุกกี้กันหากมีเพียงรายการเดียวที่มีแอตทริบิวต์
Partitioned
- วิธีที่ดีที่สุดคือการหลีกเลี่ยงสถานการณ์ที่คุณมีทั้งคุกกี้ที่แบ่งพาร์ติชันแล้ว และคุกกี้ที่ไม่ได้แบ่งพาร์ติชันโดยใช้ชื่อเดียวกันซึ่งส่งคืนในการเรียกใช้เครือข่ายเดียวกัน
ทำให้คุกกี้ที่จะแทนที่หมดอายุ
หากเว็บไซต์หรือบริการของคุณไม่รองรับการเปลี่ยนแปลงชื่อ คุณสามารถสร้างคุกกี้ที่มีการแบ่งพาร์ติชันใหม่ในขณะที่ทำให้คุกกี้ที่ไม่ได้แบ่งพาร์ติชันที่มีอยู่หมดอายุ แม้ว่าจะยังไม่มีวิธีตรวจสอบว่าคุกกี้ได้รับการแบ่งพาร์ติชันหรือไม่ แต่ส่วนหัว 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
และอาจเพิ่มแอตทริบิวต์ที่แบ่งพาร์ติชันแล้วลงในคุกกี้การตรวจสอบสิทธิ์ปกติ