2009-09-13 36 views
10

Có cách nào để đặt cookie là không phải là có thể đọc được trên tên miền phụ không? Nói cách khác, có cookie có sẵn trên domain.com, nhưng không phảiwww.domain.com hoặc xyz.domain.com.PHP setcookie() cho miền nhưng KHÔNG phải tên miền phụ

//this is what i'm "intending"... 
setcookie($name,$value,$expires,'/','domain.com'); 
//however, this is how it behaves: 
setcookie($name,$value,$expires,'/','.domain.com'); 

Lý do: Tôi đang thiết lập một CDN tĩnh trên một tên miền phụ và không muốn các cookie phiên người dùng đi qua lại cho mỗi hình ảnh, file css, js tập tin vv

... tôi có phải quay lại sử dụng www.domain.com cho trang web của mình không? Có cách giải quyết nào không?

+0

Đặt miền thành 'null' là điều chính xác duy nhất cần thực hiện tại đây. Nếu không, bạn có thể tìm thấy ['$ cookie-> setDomain ($ domain)'] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php#L117) hữu ích, như được tìm thấy trong [thư viện độc lập này] (https://github.com/delight-im/PHP-Cookie). – caw

Trả lời

17

Dường như việc có cookie trên "domain.com" sẽ khớp với hành vi "* .domain.com" là hành vi mong đợi.

Ví dụ: PERSISTENT CLIENT STATE HTTP COOKIES bang (một số tôi nhấn mạnh):

domain=DOMAIN_NAME

Khi tìm kiếm danh sách cookie cho cookie hợp lệ, một sự so sánh của thuộc tính miền của cookie là được tạo bằng tên miền Internet là máy chủ mà từ đó URL sẽ là được tìm nạp. ...
"Kết hợp đuôi" có nghĩa là thuộc tính miền đó được đối sánh đối với đuôi của đầy đủ tên miền đủ điều kiện của máy chủ lưu trữ. A thuộc tính tên miền của "acme.com" sẽ tên máy chủ lưu trữ trùng khớp "anvil.acme.com" là cũng như "shipping.crate.acme.com".

Chỉ host trong lĩnh vực quy định có thể thiết lập một cookie cho một tên miền và lĩnh vực phải có ít nhất hai (2) hoặc ba (3) giai đoạn trong họ ngăn chặn các miền có dạng:". com ", " .edu "và" va.us ". Bất kỳ tên miền nào không nằm trong một trong bảy tên miền đặc biệt cấp cao nhất được liệt kê bên dưới chỉ yêu cầu hai giai đoạn. Bất kỳ tên miền nào khác yêu cầu ít nhất ba miền. Bảy tên miền cấp cao đặc biệt gồm là: "COM", "EDU", "NET", "ORG", "GOV", "MIL" và "INT".

Vì vậy, bạn sẽ có thể sở để:

  • sử dụng "www.domain.com" cho trang web của bạn
  • hoặc sử dụng một tên miền hoàn toàn khác nhau cho nội dung tĩnh của bạn (như ".anotherdomain.com") Ví dụ:
    • , đây là những gì được thực hiện trên stackoverflow: nội dung tĩnh được phân phát từ sstatic.net
+0

Giải thích hay, +1 ở đây. – Thiyagaraj

+0

Chà, thông tin tuyệt vời. Tôi đã không chạy qua đó khi đào bới xung quanh. Cảm ơn người đàn ông. Tôi đoán điều này trả lời câu hỏi của tôi ... www.domain.com nó được. – brianreavis

+0

Bạn được chào đón :-) Hãy vui vẻ! (và, nếu sử dụng www.domain.com cho trang web và cookie của bạn, đừng quên đảm bảo rằng "domain.com", khi được sử dụng để truy cập trang web của bạn, chuyển hướng đến "www.domain.com" - không tùy thuộc vào trình duyệt để làm điều đó tự động: nó không phải lúc nào cũng hoạt động - không hoạt động sau proxy, đôi khi, ví dụ (đó là trường hợp tôi làm việc và đó là một nỗi đau)) –

6

đây là lý do tại sao một số trang web (bao gồm cả trang web này) đăng ký miền chuyên dụng để sử dụng làm CDN.

1

Không thể như lĩnh vực Cookie là tail matched chống lại các tên miền. Bạn sẽ phải đi với www.

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