2009-03-09 27 views
5

Tôi đang cố gắng viết mã PHP để xóa tất cả cookie của người dùng trên miền của mình.Không thể xóa cookie được đặt trong JavaScript trên máy chủ

Đây là những gì tôi nhận:

<?php 
$domain = 'www.example.com'; 
$deleteExpiration = time() - 60*60*24*365*10; // 10 years ago 
foreach (array_keys($_COOKIE) as $cookie) { 
    setcookie($cookie, 0, $deleteExpiration, '/', $domain); 
} 

Chạy mã này vào http://www.example.com/delete_cookies.php xóa tất cả các cookie được thiết lập trên máy chủ, nhưng không phải cookie đã được thiết lập trong JavaScript.

Tôi đã xác minh bằng hộp thoại Cookie của Firefox mà các cookie có vấn đề thực sự là từ (path = /; domain = www.example.com). Sử dụng tiêu đề HTTP Trực tiếp, tôi có thể thấy tiêu đề sau được gửi:

Set-Cookie: CookieName=0; expires=Fri, 12-Mar-1999 19:36:15 GMT; path=/; domain=www.example.com 

Vì vậy, tôi tin rằng lệnh setcookie đang hoạt động như mong đợi. Firefox chỉ không tôn trọng yêu cầu. Một điều nữa tôi nhận thấy là nếu tôi đặt cookie với domain=www.example.com trên máy chủ, thì nó được liệt kê trong hộp thoại cookie của Firefox với domain=".www.example.com", nhưng nếu tôi đặt cookie sau bằng mã JavaScript thì dấu chấm đầu tiên là không thêm vào.

Tôi đang làm gì sai? Làm cách nào để xóa các cookie này?

+0

http://stackoverflow.com/a/25967822/1642018 – AMB

+0

Bạn có thể tìm thấy ['$ cookie-> delete()'] (https://github.com/delight-im/PHP-Cookie/blob/ 004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php # L173) 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

5

Tôi đã gặp sự cố tương tự và nó đã được giải quyết bằng cách không chuyển miền.

setcookie($cookie, '', 1, '/');

Trên một mặt lưu ý từ cookie_spec "Thiết lập đường dẫn đến một giá trị cấp cao hơn không áp ánh xạ đường dẫn cụ thể hơn khác. Nếu có nhiều trận đấu cho một tên cookie nhất định, nhưng với con đường riêng Tất cả các cookie phù hợp sẽ được gửi "Vì vậy, nếu bạn có cùng cookie tên tại các vị trí đường dẫn khác nhau, bạn sẽ phải xóa từng cookie.

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