PHP:setcookie()和unset()不删除cookie

时间:2015-12-05 09:50:12

标签: php cookies setcookie unset

好的,所以我有一个非常标准的cookie设置。我在某个事件上设置了cookie并在其中保存了一些垃圾。在特定的$ _GET通话中,我想完全删除它,我尝试通过 unset() setcookie() 的组合来实现。我为该用途编写了一个名为 delCookie() 的特定函数。

现在奇怪的是:如果我将 delCookie() 调用 $_GET 变量,我将其与if子句一起使用,按预期消失。 (我在此处删除cookie之前不会访问它。)

BUT

如果我致电 delCookie() 我将Cookie内容写入 sqlite3 数据库后,(我访问该Cookie)它将不会被删除

任何想法为什么?和任何解决方案的想法,不要求我将删除信号保持在页面重新加载而不访问cookie? (或者这甚至是一个错误?)

相关代码(不按顺序):

119     /**
120      * @brief 'Deletes' the cookie 'bought'. It basically sets its expiration date to 1 hour in the past, so the browser w    ill collect it.
121      */
122     function delCookie() {
123         global $cookieDel;
124         echo "eating ...<br />";
125         unset($_COOKIE['bought']);
126         if(!setcookie('bought', FALSE, time()-3600)) {
127             echo "Error 2";
128         } else {
129             $cookieDel = TRUE;
130         }
131     }


132    /**
133      * @brief Writes a purchase to the database 'bought.db' in the    following order:TIME:DATE | ITEMS(separated by a ',') |     NAME(of the buyer) | TOTAL(amount of money spent). [consider writing the store brand aswell?]
134      */
135     function toDatabase($items, $amount) {
136         $database = new SQLite3('bought.db');
137         $fixString = preg_replace('/<br \/>/', ', ', $items);
138 
139         $SQLret = $database->query('INSERT INTO bought(date, items, name, total) VALUES("'.date('y/m/d_H:m').'", "'.$fixString.'", "test", '.$amount.');');
140     }

1 个答案:

答案 0 :(得分:3)

unset()中的值$_COOKIE使用将其删除。它只是从$_COOKIE超全局删除它,但cookie仍然存在于用户的机器上。要实际删除cookie,您需要设置具有相同名称的cookie并设置过去的过期日期。然后你仍然需要等到之后发送页面的HTTP标头,因为它是由浏览器实际删除cookie。然后在下一页请求中,cookie将出现在请求标头中。只有这样,您才能检查cookie是否实际被删除。