取消设置cookie获取未定义的索引

时间:2011-07-27 18:17:04

标签: php cookies setcookie

test.php的

<?php
setcookie('username', 'mary', time()+1000);


setcookie('username', 'mary', time()-1000);


 ?>

view.php

<?php
echo $_COOKIE['username'];


?>

在取消设置Cookie后我遇到错误

注意:未定义的索引:第3行的C:\ Users \ joe \ Documents \ Discrete Math \ xampp \ htdocs \ view.php中的用户名

5 个答案:

答案 0 :(得分:2)

您只是为了立即取消它而定义一个cookie。使用负时间在用户名上调用setcookieessentially calling unset($_COOKIE['username'])(因此,Cookie超全局中的索引不再存在,因此未定义错误)。

我称之为expected behavior

答案 1 :(得分:0)

取消设置cookie,它就像一个变量,它不再存在。 是清单。

$a = 1;
$a = null;

print $a;

答案 2 :(得分:0)

如果你取消设置cookie,cookie就会消失,因此$ _COOKIE数组不再包含这个特定的cookie密钥。

在实际使用密钥之前,您可能需要检查密钥是否存在。 您可以使用函数array_key_exists(http://php.net/array_key_exists

来完成此操作

答案 3 :(得分:0)

setcookie()并不总是意味着您将cookie设置为某个值。它只是告诉PHP更新发送回UserAgent的Cookies标头中的cookie条目。如果代理看到到期时间(setcookie()中的最后一个参数)已经过去,它将假定cookie已过期并将其删除。因此,cookie将被删除。尝试从数组中访问无效密钥将始终在PHP中生成通知。如果可以使用isset(),则应该修复它,但在生产盒上,您只需隐藏错误/警告/通知或将其记录到私人文件中。

答案 4 :(得分:-1)

我会说,按设计工作。要禁用这些类型的警告,请使用:

ini_set('display_errors', 0);

或者

ini_set('display_errors', 1);
error_reporting(E_ALL ~ E_WARN); // or some other (combination of) flag(s).