2024-02-28 09:00:02

移除一块饼干

当我想要删除Cookie时,我会尝试

unset($_COOKIE['hello']);

我在firefox的cookie浏览器中看到cookie仍然存在。我怎么才能真正去掉饼干呢?


当前回答

如果你想从你当前的所有域中完全删除cookie,那么下面的代码一定会帮助你。

unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");

这段代码将删除cookie变量完全从所有的域,即;" / " -它表示cookie变量的值为所有域设置,而不仅仅是当前域或路径。Time() - 300表示它设置为以前的时间,因此它将过期。

这就是它被完美删除的方式。

其他回答

要删除cookie,你只需要将值设置为NULL:

“如果您为cookie设置了过期时间、路径或域的非默认值,则在删除cookie时必须再次提供这些相同的值,以便正确删除cookie。” 引自《学习PHP5》一书。

所以这段代码应该工作(为我工作):

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

删除cookie: setcookie(“foo”,时间()+ 60 * 5);

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

您可以根据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");
$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与php在你的服务器,也与js为您的浏览器..(他们是用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']);

将值设置为"",过期日期设置为昨天(或过去的任何日期)

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

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