Chuyển đổi từ cookie chưa được phân vùng sang cookie được phân vùng

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à chưa được phân vùng có cùng tên trong một ứng dụng cụ thể.

Việc đặt cookie được phân vùng sẽ không ghi đè hoặc thay thế cookie chưa được phân vùng hiện có bằng cùng một 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 kho cookie riêng biệt. Khi bạn tắt cookie của bên thứ ba, chỉ chấp nhận cookie được phân vùng. Nếu cả hai cookie đều xuất hiện, thì không thể lập trình để phân loại cookie nào được phân vùng và cookie nào không được phân vùng. Điều này có thể dẫn đến hành vi không mong muốn.

Có hai lựa chọn để giải quyết vấn đề này: 1. Hết hạn cookie bạn sắp thay thế 2. Đổi tên cookie

Các điểm chính cần cân nhắc

Khi bạn chuyển sang cookie được phân vùng, hãy lưu ý những điều sau:

  1. Không có cách lập trình để xác định xem một cookie đã được phân vùng hay chưa được phân vùng. Tuy nhiên, bạn có thể xác định trạng thái được phân vùng của cookie trong Công cụ của Chrome cho nhà phát triển.
  2. Cookie được phân vùng không ghi đè cookie không được phân vùng – 2 cookie hoàn toàn giống nhau (có cùng thuộc tính như tên, miền hoặc đường dẫn) sẽ được coi là cookie riêng biệt nếu chỉ có một cookie có thuộc tính Partitioned.
  3. Tốt nhất là bạn nên tránh trường hợp cả cookie được phân vùng lẫn cookie chưa được phân vùng có cùng tên bị trả về trong cùng một lệnh gọi mạng.

Hết hạn cookie mà bạn sắp thay thế

Nếu trang web hoặc dịch vụ của bạn không thể cho phép thay đổi tên, bạn có thể tạo một cookie mới được phân vùng 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 những tiêu đề Set-Cookie không có thuộc tính Partitioned sẽ không ảnh hưởng đến cookie không được phân vùng.

Ví dụ sau đây cho thấy cách hết hạn cookie chưa được phân vùng có tên là example và không ảnh hưởng đế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 được phân vùng mới có tên là cookieName sẽ được thêm hoặc cập nhật nếu đã có.

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. Ví dụ: nếu có một cookie chưa được phân vùng 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 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 hạn của cookie mới trùng với thời hạn của cookie chưa được phân vùng. Việc làm mới giá trị của cookie trong quá trình này có thể là một cách hợp lý.

Duy trì cả cookie được phân vùng và không được phân vùng

Trong giai đoạn chuyển đổi, hãy cân nhắc việc duy trì 2 cookie được đồng bộ hoá riêng biệt: một cookie được phân vùng và một cookie không được phân vùng. Ví dụ: bạn có thể có cả cookie authauth-partitioned, trong đó cookie thứ hai được đặt bằng thuộc tính Partitioned.

Mỗi khi giá trị được cập nhật, bạn nên thử đặ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: sẽ không chấp nhận cookie nào.
  • Trên các ứ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 cookie auth-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ể các ứng dụng đó có hỗ trợ CHIPS hay không: cả authauth-partitioned đều được chấp nhận.

Khi ứng dụng 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.

Khi bạn đã xác định được rằng phần lớn người dùng đã được làm mới cookie, cookie auth-partitioned có thể được 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.