2013-04-30 47 views
6

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?

Trả lời

5

Đoạn gây nhầm lẫn cho bạn về khả năng gán giá trị mới cho cookie (cũng như thay đổi/làm mới ngày hết hạn cookie). Nếu nó không được viết theo cách đó, máy khách HTTP sẽ cần lưu trữ nhiều cookie có cùng tên và có thể cần phải quyết định một tiêu chí khác để gửi tới máy chủ HTTP theo yêu cầu tiếp theo.

Về phần thứ hai của câu hỏi của bạn:

Nếu hai cookie được quy định trong cùng một yêu cầu, điều thứ hai "chiến thắng", do đó một cookie với host-only-flag = false sẽ được lưu trữ.

Nếu hai cookie đó có yêu cầu riêng, thì cookie thứ hai sẽ ghi đè lên yêu cầu đầu tiên, vì chúng khớp với tên cookie (được chỉ định), tên miền-giá trị (một lần được chỉ định, một khi bắt nguồn) và đường dẫn-giá trị (bắt nguồn) . Khi lưu trữ chúng, các mục trong cơ sở dữ liệu cookie của trình duyệt chỉ khác nhau trong cờ chỉ dành cho máy chủ lưu trữ.

này host-only-cờ có hiệu lực khi khách hàng đưa ra một yêu cầu mới đến máy chủ (snippet from RFC6265):

The user agent MUST use an algorithm equivalent to the following 
algorithm to compute the "cookie-string" from a cookie store and a 
request-uri: 

1. Let cookie-list be the set of cookies from the cookie store that 
    meets all of the following requirements: 

    * Either: 

      The cookie's host-only-flag is true and the canonicalized 
      request-host is identical to the cookie's domain. 

     Or: 

      The cookie's host-only-flag is false and the canonicalized 
      request-host domain-matches the cookie's domain. 

Các chi tiết đẹp là như thế nào trong các tên miền được so sánh. Thuật toán khớp được chỉ định trong section 5.1.3.

Về cơ bản, bạn có thể có cookie hợp lệ cho tất cả các tên miền phụ nếu tên miền được chỉ định với hàng đầu "."

Khi miền bị bỏ qua, mặc dù (và do đó được máy chủ yêu cầu), điều này không bao giờ có thể xảy ra vì luôn có nhu cầu trùng khớp trong miền.

Nghiên cứu sâu hơn xác định:

Trong trình duyệt thực hành lưu trữ một tên miền mà đã được quy định tại các cookie với một được thêm vào trước . (ví www.example.com nó sẽ lưu trữ .www.example.com) để yêu cầu subdomain.www.example.com cũng sẽ trở lại cookie . Khi không có tên miền được chỉ định tên miền đơn giản mà không có một số tiền được thêm trước . sẽ được lưu trữ, do đó yêu cầu đối với tên miền phụ sẽ không bao gồm cookie đó.

+0

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

+0

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

+0

Vừa xác nhận hành vi này trên Chrome! – Benjamin

Các vấn đề liên quan