Tiền tố dấu chấm trong miền cookie có nghĩa là gì?


93

nhập mô tả hình ảnh ở đây

Sự khác biệt giữa local.test.comvà là .local.test.comgì? Ảnh chụp màn hình là từ Chrome.




Trong nhận xét từ người dùng2864740, 26/09/2016 lúc 16:44 - Liên kết đã chết, có vẻ như miền erik.io đã được chuyển cho người dùng hoặc công ty đăng ký miền khác.
qxotk

Câu trả lời:


58

local.test.comsẽ được sử dụng cho miền, trong khi .local.test.comcũng sẽ được sử dụng cho miền phụ.


11
Vì vậy, local.test.comsẽ không áp dụng cho x.local.test.com, nhưng .local.test.comáp dụng cho cả local.test.comvà cho x.local.test.com?
ripper234

29
Tôi tin rằng điều này là không chính xác. Cookie được chia sẻ với bất kỳ và tất cả các miền phụ phía dưới, có hoặc không có dấu chấm. Bạn có thể coi tên miền phụ là cookie "kế thừa" từ cha mẹ của chúng. Vì vậy, đặt cookie trên example.com đặt cookie trên blog.example.com và my.blog.example.com. Đặt cookie trên blog.example.com sẽ đặt cookie trên this.is.my.blog.example.com và mọi miền phụ ở giữa. Nhưng, cũng giống như thừa kế, điều ngược lại là không đúng. Đặt cookie trên blog.example.com không đặt cookie trên example.com.
geddski

6
Điều đó nói rằng, bạn CÓ THỂ giới hạn cookie ở chỉ máy chủ lưu trữ bằng cách không đặt tên miền của cookie (hoặc đặt thành chuỗi trống). Thật kỳ lạ, điều đó sẽ đặt cookie chỉ cho máy chủ lưu trữ (example.com) chứ không phải bất kỳ miền phụ nào của nó.
geddski

8
Để làm rõ dựa trên một câu trả lời khác, dấu chấm từng tạo ra sự khác biệt, nhưng giờ thì không. Cookie sẽ được gửi đến bất kỳ miền phụ nào của miền được chỉ định, có hoặc không có dấu chấm ở đầu. Điều thực sự kiểm soát việc nó có được chuyển đến các miền phụ hay không là bạn có đặt miền trên cookie hay không. Nếu bạn không đặt tên miền nào, thì cookie sẽ chỉ được gửi đến tên miền chính xác đã cấp nó. Nó sẽ không bao giờ được gửi đến các miền mẹ ít cụ thể hơn (ví dụ: "local.test.com" sẽ không được đưa vào yêu cầu tới "test.com") và nó sẽ chỉ được gửi đến các miền phụ phù hợp nếu bạn đặt giá trị miền.
Triynko

4
@Triynko, dấu chấm tạo ra sự khác biệt khi bạn buộc phải cập nhật cookie. Tôi đã không quản lý để cô lập tất cả các quy tắc, nhưng tôi đã thấy kết quả khác nhau dựa trên sự hiện diện của dấu chấm ở đầu hay không và nó không thẳng tiến. Cách hoạt động của tính năng này khác nhau tùy theo trình duyệt và không phải tất cả đều trực quan. Kiểm soát xem tên cookie có dấu chấm ở đầu trình duyệt hay không không phải là nhiệm vụ lập trình đơn giản nhất mà tôi từng làm.
DanAllen

83

Dấu chấm ở đầu có nghĩa là cookie cũng hợp lệ cho các miền phụ; tuy nhiên, các đặc tả HTTP gần đây (RFC 6265) đã thay đổi quy tắc này, vì vậy các trình duyệt hiện đại không nên quan tâm đến dấu chấm ở đầu. Có thể cần dấu chấm bởi trình duyệt cũ đang triển khai RFC 2109 không dùng nữa.

RFC 6265 phần 4.1.2.3

Ví dụ: nếu giá trị của thuộc tính Miền là "example.com", thì tác nhân người dùng sẽ bao gồm cookie trong tiêu đề Cookie khi thực hiện các yêu cầu HTTP đến example.com, www.example.com và www.corp.example. com. (Lưu ý rằng% x2E (".") Đứng đầu, nếu có, sẽ bị bỏ qua mặc dù ký tự đó không được phép, nhưng% x2E (".") Ở cuối, nếu có, sẽ khiến tác nhân người dùng bỏ qua thuộc tính. )


1
RFC ra đời vào tháng 4 năm 2011. Cả IE8 và IE9 đều được phát hành lần đầu trước ngày đó và - đáng buồn thay - vẫn được sử dụng. Vì vậy, dự đoán tốt nhất của tôi (không thử) là họ cần dấu chấm ở đầu. Có ai biết ước tính có bao nhiêu trình duyệt trong tự nhiên vẫn đang chạy trên RFC cũ không?
BlaM

erik.io/blog/2014/03/04/definitive-guide-to-cookie-domains khuyên bạn nên sử dụng dấu chấm ở đầu để có khả năng tương thích tốt nhất khi muốn bao gồm các miền phụ. Yêu cầu tương thích này sẽ chỉ tiếp tục giảm. (Không bắt buộc cho 6255, nhưng cần thiết và với kết quả cuối cùng như đối với 2109.)
user2864740

12

Từ bài viết Hướng dẫn cuối cùng về miền cookie và lý do tại sao tiền tố www giúp trang web của bạn an toàn hơn :

Phần kết luận

Mặc dù các định nghĩa có phần khác nhau, nhưng chúng ta có thể đơn giản hóa nó cho bất kỳ triển khai nào sau đây như:

  • Khi không có miền nào được đặt trong cookie, cookie chỉ nên khớp với tên máy chủ chính xác của yêu cầu. [LƯU Ý: điều này khác với việc trả về Set-Cookie với miền không có dấu chấm!] Không có miền phụ, không có kết quả khớp một phần. Điều này có nghĩa đơn giản là không bao gồm thuộc tính miền - không hợp lệ để đặt thuộc tính miền trống. Thật không may, Internet Explorer dường như coi đây là tên máy chủ cùng với bất kỳ miền phụ nào .

  • Khi đặt tên miền trong cookie, lựa chọn an toàn là đặt nó trước dấu chấm, như .erik.io. Cookie sẽ khớp với tất cả các miền phụ.

  • Đặt miền cookie không có dấu chấm trước, như erik.io, không hợp lệ trong triển khai RFC 2109 và sẽ tạo ra hành vi tương tự như với dấu chấm trước trên các triển khai khác. Không có cách nào để hạn chế cookie đối với một miền cụ thể được thiết lập rõ ràng, mà không có miền phụ được bao gồm.

Các quan sát đáng giá khác:
  • Trong tất cả các RFC, miền cookie được chỉ định phải khớp với tên máy chủ hiện tại, theo đối sánh bình thường. Đặt cookie cho www.erik.io trong phản hồi từ erik.io là không hợp lệ, vì cookie có miền www.erik.io không khớp với erik.io, cookie trước đây cụ thể hơn.

  • Trong RFC 6265, các miền được đặt giá trị thấp hơn rõ ràng khi phân tích cú pháp tiêu đề Set-Cookie.


1

Dấu chấm hàng đầu trong ".local.test.com" chỉ cách chrome xem cookie với bộ "Domain = local.test.com" (hoặc "Domain = .local.test.com", giống nhau).

Định nghĩa Set-Cookie không có "Tên miền = cái gì đó" sẽ xem tên miền (= máy chủ) mà không có dấu chấm ở đầu.

Vì vậy, dấu chấm ở đầu trong chrome không phản ánh liệu dấu chấm ở đầu có được sử dụng từ máy chủ hay không, mà là cookie đó có "Tên miền = cái gì đó" trong định nghĩa của nó từ máy chủ hay không. (Và nếu có, cookie cũng sẽ được gửi đến các miền phụ).

Ít nhất đây là những gì các bài kiểm tra của tôi cho thấy. Chrome sẽ làm cho điều này dễ đọc hơn, chẳng hạn như xem chuỗi chính xác đã xác định cookie và thời điểm nhận được cookie.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.