Khi tôi muốn xóa Cookie, tôi thử
unset($_COOKIE['hello']);
Tôi thấy trong trình duyệt cookie của mình từ firefox rằng cookie vẫn tồn tại. Làm thế nào tôi thực sự có thể loại bỏ cookie?
Khi tôi muốn xóa Cookie, tôi thử
unset($_COOKIE['hello']);
Tôi thấy trong trình duyệt cookie của mình từ firefox rằng cookie vẫn tồn tại. Làm thế nào tôi thực sự có thể loại bỏ cookie?
Câu trả lời:
Bạn có thể thử cái này
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. Nó không thay đổi gì nếu bạn loại bỏ nó.
unset($_COOKIE['Hello']);
thực sự quan trọng nếu bạn có thể kiểm tra cookie ở đâu đó sau này trong mã.
Đặt giá trị thành "" và ngày hết hạn thành ngày hôm qua (hoặc bất kỳ ngày nào trong quá khứ)
setcookie("hello", "", time()-3600);
Sau đó, cookie sẽ hết hạn vào lần tải trang tiếp theo.
Một cách sạch để xóa cookie là xóa cả $_COOKIE
tệp cookie giá trị và trình duyệt:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
cuộc gọi này :setcookie('key', '', time() - 3600, '/');
unsetting
thành công.
null
các giá trị, bạn sẽ cần sử dụng mảng_key_exists () , vì một cookie có null
giá trị sẽ không được tìm thấy bằng isset()
séc.
Để xóa một cách đáng tin cậy một cookie, nó không đủ để đặt nó hết hạn bất cứ lúc nào trong quá khứ, như được tính toán bởi máy chủ PHP của bạn. Điều này là do các máy khách có thể và thường có thời gian khác với máy chủ của bạn.
Cách thực hành tốt nhất là ghi đè cookie hiện tại bằng cookie trống sẽ hết hạn một giây trong tương lai sau kỷ nguyên (ngày 1 tháng 1 năm 1970 00:00:00 UTC), như vậy:
setcookie("hello", "", 1);
Điều đó sẽ bỏ đặt cookie trong mã của bạn, nhưng vì biến $ _COOKIE được làm mới trên mỗi yêu cầu, nên nó sẽ quay lại yêu cầu trang tiếp theo.
Để thực sự thoát khỏi cookie, hãy đặt ngày hết hạn trong quá khứ:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
cookie?
Tôi đã có cùng một vấn đề trong mã của tôi và thấy rằng đó là một vấn đề đường dẫn cookie. Kiểm tra bài viết tràn ngăn xếp này: Không thể xóa cookie đặt php
Tôi đã đặt cookie bằng cách sử dụng giá trị đường dẫn là "/", nhưng không có bất kỳ giá trị đường dẫn nào khi tôi cố gắng xóa nó, vì vậy nó không rõ ràng. Vì vậy, đây là một ví dụ về những gì đã làm việc:
Đặt cookie:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Xóa cookie:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
Mong rằng sẽ giúp.
Nếu bạn đặt cookie hết hạn trong quá khứ, trình duyệt sẽ xóa nó. Xem ví dụ xóa setcookie () tại php.net
Xem mẫu có nhãn " Ví dụ xóa ví dụ # 2 setcookie () " từ các tài liệu PHP. Để xóa cookie khỏi trình duyệt, bạn cần thông báo cho trình duyệt biết rằng cookie đã hết hạn ... trình duyệt sẽ xóa nó. unset
vì bạn đã sử dụng, nó chỉ xóa cookie 'xin chào' khỏi mảng COOKIE.
Đây là cách mã PHP v7 setcookie () hoạt động khi bạn thực hiện:
<?php
setcookie('user_id','');
setcookie('session','');
?>
Từ đầu ra của tcpdump trong khi đánh hơi trên cổng 80, máy chủ sẽ gửi cho khách hàng (Trình duyệt) các tiêu đề HTTP sau:
Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Quan sát các gói trong các yêu cầu sau, Trình duyệt không còn gửi các cookie này trong các tiêu đề
Để xóa cookie, bạn chỉ cần đặt giá trị thành NULL:
"Nếu bạn đã đặt cookie với các giá trị không giới hạn cho thời gian hết hạn, đường dẫn hoặc tên miền, bạn phải cung cấp lại các giá trị đó khi bạn xóa cookie để xóa cookie đúng cách." Trích dẫn từ cuốn sách "Học PHP5".
Vì vậy, mã này sẽ hoạt động (làm việc cho tôi):
Đặt cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Xóa cookie:
setcookie('foo', '', time() + 60 * 5);
Nhưng tôi nhận thấy rằng tất cả mọi người đang thiết lập ngày hết hạn thành quá khứ, điều đó có cần thiết không, và tại sao?
''
không giống như null
.
Để xóa tất cả các cookie bạn có thể viết:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Chỉ cần đặt ngày hết hạn thành một giờ trước, nếu bạn muốn "xóa" cookie, như thế này:
setcookie ("TestCookie", "", time() - 3600);
hoặc là
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
Nguồn: http://www.php.net/manual/en/feft.setcookie.php
Bạn nên sử dụng filter_input()
chức năng cho tất cả các toàn cầu mà khách truy cập có thể nhập / thao tác, như thế này:
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
Bạn có thể đọc thêm về nó ở đây: http://www.php.net/manual/en/feft.filter-input.php và tại đây: http://www.w3schools.com/php/func_filter_input.asp
Tôi biết rằng đã có một thời gian dài kể từ khi chủ đề này được tạo ra nhưng tôi đã thấy một lỗi nhỏ trong giải pháp này (tôi có thể gọi nó như thế, bởi vì đó là một chi tiết). Tôi đồng ý rằng giải pháp tốt hơn có lẽ là giải pháp này:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
Nhưng, trong trường hợp hiện tại, bạn xóa cookie trong mọi trường hợp chức năng unset hoạt động và ngay lập tức bạn tạo cookie mới hết hạn trong trường hợp chức năng unset không hoạt động.
Điều đó có nghĩa là ngay cả khi chức năng unset hoạt động, nó vẫn sẽ có 2 cookie trên máy tính. Mục tiêu được hỏi, theo quan điểm logic, là xóa cookie nếu có thể và nếu thực sự không, hãy làm cho nó hết hạn; để có được kết quả "sạch nhất".
Vì vậy, tôi nghĩ rằng chúng ta nên làm tốt hơn:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
Cảm ơn và có một ngày tốt đẹp :)
$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";
// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds
// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];
// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");
// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); // time() - 3600 means, set the cookie expiration date to the past hour.
Nếu bạn muốn xóa cookie hoàn toàn khỏi tất cả các tên miền hiện tại của bạn thì đoạn mã sau đây chắc chắn sẽ giúp bạn.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Mã này sẽ xóa hoàn toàn biến cookie khỏi tất cả tên miền của bạn; "/" - nó biểu thị tất cả giá trị của biến cookie được đặt cho tất cả tên miền không chỉ cho tên miền hoặc đường dẫn hiện tại. time () - 300 biểu thị rằng nó đặt thành thời gian trước nên nó sẽ hết hạn.
Đó là cách nó hoàn toàn bị xóa.
Bạn có thể đặt biến phiên dựa trên giá trị cookie
session_start();
if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}
echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
Bạn chỉ có thể sử dụng chức năng tùy chỉnh này:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
Nếu bạn muốn xóa $ _COOKIE ['user_account'].
Chỉ dùng:
unset_cookie('user_account');
Khi bạn nhập 0
thời gian, bạn có nghĩa là "ngay bây giờ" (+ 0 từ bây giờ thực sự là bây giờ) cho trình duyệt và nó sẽ xóa cookie.
setcookie("key", NULL, 0, "/");
Tôi đã kiểm tra nó trong trình duyệt chrome cung cấp cho tôi:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
Chỉ cần đặt giá trị của cookie false
để bỏ đặt nó,
setcookie('cookiename', false);
Tái bút: - Đó là cách dễ nhất để làm điều đó.
Bạn phải xóa cookie bằng php trong máy chủ của bạn và cả js cho trình duyệt của bạn .. (Chúng đã được tạo bằng php, nhưng các tệp cookie cũng nằm trong ứng dụng trình duyệt):
Một ví dụ:
if ($_GET['action'] == 'exit'){
// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Hầu hết các bạn đang quên rằng điều này sẽ chỉ hoạt động trên một máy cục bộ. Trên một miền, bạn sẽ cần một mẫu như ví dụ này.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
hoạt động cho bất kỳ tên miền, cho dù localhost hay không.
$cookie->delete()
từ github.com/delight-im/PHP-Cookie hữu ích. Mã từ câu hỏi chỉ xóa thuộc tính đã được phân tích cú pháp ở phía máy chủ. Các cookie sẽ vẫn sống ở phía khách hàng.