Khi chuyển đổi trang web sang cookie được phân vùng, bạn có thể gặp phải hành vi không mong muốn nếu cả cookie được phân vùng và không phân vùng có cùng tên đều xuất hiện cho một ứng dụng khách bất kỳ.
Việc đặt cookie được phân vùng sẽ không ghi đè hoặc thay thế cookie không phân vùng hiện có có cùng tên. Cả hai sẽ tồn tại, miễn là bạn bật cookie của bên thứ ba, nhưng trong các lọ cookie riêng biệt. Khi cookie của bên thứ ba bị tắt, chỉ cookie được phân vùng mới được chấp nhận. Nếu cả hai cookie đều có, bạn không thể xác định được cookie nào được phân vùng và cookie nào không được phân vùng theo phương thức lập trình. Điều này có thể dẫn đến hành vi không mong muốn.
Có hai cách để giải quyết vấn đề này: 1. Hết hạn cookie mà bạn sẽ thay thế 2. Đổi tên cookie
Những điểm chính cần cân nhắc
Khi bạn chuyển đổi sang cookie được phân vùng, hãy lưu ý những điều sau:
- Không có cách nào để xác định theo phương thức lập trình xem một cookie được gửi trong yêu cầu HTTP có được phân vùng hay không. Tuy nhiên, bạn có thể xác định trạng thái phân vùng của cookie trong Công cụ của Chrome cho nhà phát triển. Bạn có thể sử dụng CookieStore API để phân biệt giữa cookie được phân vùng và không được phân vùng. Những cookie này không có thuộc tính
HttpOnly
. - Cookie được phân vùng sẽ không ghi đè cookie không được phân vùng – 2 cookie hoàn toàn giống nhau (tức là có cùng thuộc tính như tên, miền hoặc đường dẫn) sẽ được coi là các cookie riêng biệt nếu chỉ một cookie có thuộc tính
Partitioned
. - Tốt nhất là bạn nên tránh tình huống cả cookie được phân vùng và cookie không được phân vùng có cùng tên được trả về trong cùng một lệnh gọi mạng.
Hết hạn các cookie mà bạn sẽ thay thế
Nếu trang web hoặc dịch vụ của bạn không thể thay đổi tên, thì bạn có thể tạo một cookie được phân vùng mới trong khi hết hạn cookie chưa được phân vùng hiện có. Mặc dù không có cách nào để xác định liệu cookie có được phân vùng hay không, nhưng các tiêu đề Set-Cookie
có thuộc tính Partitioned
sẽ không ảnh hưởng đến những cookie không được phân vùng.
Ví dụ sau đây cho thấy cách hết hạn cookie không được phân vùng có tên là example
và giữ nguyên mọi cookie được phân vùng, ngay cả khi các cookie này có cùng tên. Một cookie phân vùng mới có tên là cookieName
sẽ được thêm vào hoặc cập nhật nếu đã tồn tại.
Set-Cookie: example=-1;HttpOnly;SameSite=None;Secure;Max-Age:0
Set-Cookie: cookieName=value;Secure;SameSite=None;MaxAge=34560000;Partitioned
Đổi tên cookie
Cách hiệu quả nhất để đảm bảo quá trình chuyển đổi liền mạch là sử dụng các tên khác nhau cho cookie được phân vùng và không được phân vùng của bạn. Ví dụ: nếu có một cookie chưa được phân vùng có tên là "example", bạn có thể di chuyển cookie đó sang một cookie được phân vùng.
Set-Cookie: example-partitioned=value;Secure;SameSite=None;MaxAge=34560000;Partitioned
Vì thời gian hết hạn của cookie không được hiển thị theo phương thức lập trình, nên không có cách nào để đặt thời gian hết hạn của cookie mới trùng với thời gian hết hạn của cookie chưa phân vùng. Có thể thực tế là làm mới giá trị của cookie trong quá trình này.
Duy trì cả cookie được phân vùng và không được phân vùng
Trong thời gian chuyển đổi, hãy cân nhắc việc duy trì hai cookie được đồng bộ hoá riêng biệt: một cookie được phân vùng và một cookie chưa được phân vùng. Ví dụ: bạn có thể có cả cookie auth
và auth-partitioned
, trong đó cookie sau được đặt bằng thuộc tính Partitioned
.
Mỗi khi giá trị được cập nhật, bạn nên cố gắng đặt cả hai cookie.
- Trên các ứng dụng chặn cookie của bên thứ ba nhưng chưa hỗ trợ CHIPS: cả hai cookie đều sẽ không được chấp nhận.
- Trên những ứng dụng chặn cookie của bên thứ ba và hỗ trợ CHIPS: cookie
auth
sẽ bị từ chối, nhưng cookieauth-partitioned
sẽ được chấp nhận. - Trên các ứng dụng không chặn cookie của bên thứ ba, bất kể ứng dụng đó có hỗ trợ CHIPS hay không: cả
auth
vàauth-partitioned
đều được chấp nhận.
Khi ứng dụng của bạn cần đọc cookie xác thực, trước tiên, bạn nên tìm auth-partitioned
; nhưng nếu phải tạm thời khôi phục thay đổi đó, bạn có thể quay lại tìm cookie auth
.
Sau khi bạn xác định rằng phần lớn người dùng đã làm mới cookie, cookie auth-partitioned
có thể bị gỡ bỏ và thuộc tính Phân vùng có thể được thêm vào cookie xác thực thông thường.