RFC 6265 trạng thái mà một user-agent nên tiến hành theo cách sau khi nhận được một tiêu đề Set-Cookie:Cookie có chỉ lưu trữ trên máy chủ thay thế cookie không có cookie?
Nếu thuộc tính tên miền được thiết lập:
- Đặt tên miền của cookie đến miền thuộc tính.
- Đặt cờ chỉ lưu trữ của cookie thành
false
.
Nếu thuộc tính Tên miền là không thiết lập:
- Đặt tên miền của cookie theo yêu cầu-host canonicalized.
- Đặt cờ chỉ lưu trữ của cookie thành
true
.
Điều này hoàn toàn rõ ràng. Sự rắc rối đi kèm với đoạn này:
Nếu user agent nhận một cookie mới với cookie cùng tên, miền có giá trị, và đường dẫn có giá trị như một cookie mà nó đã lưu trữ, cookie đang tồn tại bị đuổi ra và được thay thế bằng cookie mới.
Hãy lấy một ví dụ, với hai cookie nhận được trên miền www.example.com
:
Set-cookie: name=value
Set-Cookie: name=value; Domain=www.example.com
Tên miền (và đường dẫn) sẽ giống nhau cho cả cookie, nhưng một trong những đầu tiên sẽ có cơ host- chỉ cờ được đặt thành true
và cột thứ hai là false
.
Đọc RFC, có vẻ như không quan trọng khi so sánh hai cookie và chúng vẫn được coi là tương đương, nhưng tôi không chắc rằng cách diễn giải của tôi là chính xác.
Đại lý người dùng có nên thay thế cookie đầu tiên bằng cookie thứ hai hay lưu trữ cả hai cookie này?
Cảm ơn câu trả lời của bạn. Câu được trích dẫn trong câu hỏi của tôi cũng gây nhầm lẫn cho tôi về việc có tính đến yêu cầu lưu trữ và đường dẫn yêu cầu khi so sánh hai cookie hay không: ví dụ: nếu tôi nhận được cùng một cookie hai lần, không có thuộc tính 'Đường dẫn', trên hai đường dẫn yêu cầu, tôi có nên xem xét hai cookie tương đương (cái thứ hai thay thế cho cookie đầu tiên), hoặc khác nhau (cả hai đều được lưu trữ)? – Benjamin
Cả hai đều được lưu trữ. Nếu đường dẫn bị bỏ qua, nó được ngụ ý bởi yêu cầu. Sau đó, nó chỉ thay thế một cookie hiện có nếu các đường dẫn khớp với nhau. Tôi cho rằng nhiều deveopers web có thể đau đớn xác nhận hành vi này vì nó có thể khiến bạn đau đầu nếu bạn không sử dụng đường dẫn khi đặt cookie trong khi tập lệnh được thực thi trong thư mục phụ. – akirk
Vừa xác nhận hành vi này trên Chrome! – Benjamin