好的,所以我有一个非常标准的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 }
答案 0 :(得分:3)
对unset()
中的值$_COOKIE
使用不将其删除。它只是从$_COOKIE
超全局删除它,但cookie仍然存在于用户的机器上。要实际删除cookie,您需要设置具有相同名称的cookie并设置过去的过期日期。然后你仍然需要等到之后发送页面的HTTP标头,因为它是由浏览器实际删除cookie。然后在下一页请求中,cookie将出现在请求标头中。只有这样,您才能检查cookie是否实际被删除。