[Php] 删除一个cookie


Answers

将值设置为“”,并将到期日期设置为昨天(或过去的任何日期)

setcookie("hello", "", time()-3600);

然后,Cookie将在下次加载页面时过期。

Question

当我想删除Cookie时,我尝试

unset($_COOKIE['hello']);

我从firefox的cookie浏览器中看到该cookie仍然存在。 我怎样才能真正删除cookie?




要删除cookie,只需将该值设置为NULL即可:

“如果您设置了一个包含过期时间,路径或域的非默认值的cookie,当您删除cookie以便正确删除cookie时,您必须再次提供相同的值。” 从“学习PHP5”书中引用。

所以这段代码应该可以工作(适用于我):

设置cookie: setcookie('foo', 'bar', time() + 60 * 5);

删除cookie: setcookie('foo', '', time() + 60 * 5);

但我注意到,每个人都将过期日期设置为过去,是否有必要,为什么?




我在我的代码中遇到同样的问题,发现它是一个cookie路径问题。 看看这个堆栈溢出帖子: 不能删除php设置cookie

我已经使用路径值“/”设置了cookie,但是当我试图清除它时没有任何路径值,所以它不清楚。 所以这是一个有效的例子:

设置cookie:

$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);

清除cookie:

setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);

希望有所帮助。




这会在您的代码中取消设置cookie,但由于$ _COOKIE变量会在每个请求中刷新,因此它只会回到下一个页面请求。

要真正摆脱cookie,请设置过去的到期日期:

// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);



$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.



如果您想要“移除”cookie,只需将过期日期设置为一小时前,如下所示:

setcookie ("TestCookie", "", time() - 3600);

要么

setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);

资料来源: http://www.php.net/manual/en/function.setcookie.php : http://www.php.net/manual/en/function.setcookie.php

您应该使用filter_input()函数来访问访问者可以输入/处理的所有全局变量,如下所示:

$visitors_ip = filter_input(INPUT_COOKIE, 'id');

你可以在这里阅读更多关于它的信息: http://www.php.net/manual/en/function.filter-input.php : http://www.php.net/manual/en/function.filter-input.php和这里: http://www.w3schools.com/php/func_filter_input.asp : http://www.w3schools.com/php/func_filter_input.asp




请参阅PHP文档中标有“ Example#2 setcookie()delete example ”的示例 。 要清除浏览器中的cookie,您需要告诉浏览器cookie已过期,然后浏览器将其删除。 unset因为您已经使用它只是从COOKIE数组中删除'hello'cookie。




您可以根据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");



你必须在你的服务器中用php删除cookie,并且还要用js来为你的浏览器删除cookie。(他们用php做了,但cookie文件也在浏览器客户端中):

一个例子:

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']);