2010-07-06 31 views
6

Tôi có một cookie mà tôi sử dụng trên ứng dụng của mình. Có vẻ như sau:Cookie PHP viết trên miền không chính xác

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Trong phần của tập lệnh, dựa trên một số điều kiện, tôi đang cố gắng thay đổi giá trị của cookie. Tôi đang sử dụng mã này:

// overwrite cookie 
if($condition){ 
    setcookie("foo", "cat", 0, "/", "my.domain.tld"); 
} 

Sau đó, dữ liệu cookie của tôi trông như thế này:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
| foo | cat | .my.domain.tld  |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Tại sao một . đang được thêm vào phía trước tên miền? Tôi muốn ghi đè lên cookie hiện có.

+0

không có ý nghĩa, nó * phải * được đặt thành anything.domain.tld nếu không có lỗi lớn ở đâu đó - điều duy nhất tôi dám đề xuất, là bạn kiểm tra lại và đảm bảo rằng cookie đầu tiên không có trong thực tế thiết lập để .anything chứ không phải là thứ hai .. – nathan

+0

Nathan, có vẻ như nó không phải là một lỗi rất nhiều vì nó có thể là một nguồn phổ biến cho sự nhầm lẫn. Xem câu trả lời dưới đây :) –

+0

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). Nó sẽ chăm sóc bình thường hóa tên miền mà bạn cung cấp. – caw

Trả lời

0

Khi nó quay ra, xác định không có miền dường như làm việc:

setcookie("foo", "cat", 0, "/"); 

Dự kiến ​​Cookie dữ liệu:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | cat | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Lạ, nhưng nó hoạt động.

0

Từ tài liệu:

Tên miền có sẵn cookie. Để làm cho cookie có sẵn trên tất cả các tên miền phụ của example.com thì bạn sẽ đặt nó thành '.example.com'. Các . không bắt buộc nhưng làm cho nó tương thích với nhiều trình duyệt hơn. Đặt nó thành www.example.com sẽ làm cho cookie chỉ có sẵn trong tên miền phụ www. Tham khảo kết hợp đuôi trong thông số kỹ thuật để biết chi tiết.

Và đuôi phù hợp với spec là ở đây:

http://curl.haxx.se/rfc/cookie_spec.html

+0

Tôi nên cụ thể hơn. Bởi 'bất cứ điều gì' tôi có nghĩa là tên miền phụ có thể là bất cứ điều gì. Tôi không muốn thu hẹp câu trả lời xuống tên miền phụ cụ thể 'www'. Để chính xác hơn, tôi không muốn cookie khớp với * tất cả * tên miền phụ cho miền. Tôi đã cập nhật câu hỏi của mình. –

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