【问题标题】:unsetting cookie getting Undefined index取消设置 cookie 获取未定义的索引
【发布时间】:2011-07-27 18:17:04
【问题描述】:

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 中的用户名

【问题讨论】:

  • 这就是你应该得到的,不是吗?毕竟,您正在取消设置它。 see?

标签: php cookies setcookie


【解决方案1】:

您定义的 cookie 只是为了立即取消设置。在 username 上调用 setcookie 并带有负时间是 essentially calling unset($_COOKIE['username'])(因此,cookie 超全局中的索引不再是未定义的错误)。

我称之为expected behavior

【讨论】:

    【解决方案2】:

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

    $a = 1;
    $a = null;
    
    print $a;
    

    【讨论】:

      【解决方案3】:

      如果您取消设置 cookie,cookie 就会消失,因此 $_COOKIE 数组中将不再有这个特定的 cookie 键。

      您可能想在实际使用密钥之前检查密钥是否存在。 您可以使用函数 array_key_exists (http://php.net/array_key_exists) 来做到这一点

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          我会说,按设计工作。要禁用此类警告,请使用:

          ini_set('display_errors', 0);
          

          或者

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

          【讨论】:

          • 这确实是一个糟糕的解决方案。他应该学会避免犯错或编写好的代码。这只是伪装
          • 同意。仅仅因为它们不是致命错误并不意味着它们应该被压制和不予补救。
          • 在 Tim 的辩护中,虽然您应该检查是否定义了数组索引,但鼓励在实时服务器上不要显示错误、警告或通知。抑制错误并不总是好的(尤其是使用@),但在live box上我会说它很好。
          • 感谢@PhpMyCoder。除此之外,你可以压制通知,它们不会受到伤害。此外,您始终可以从日志中读取它们。我敢肯定,您不会在生产环境中显示错误(是吗?),您会显示自己的抽象错误(“糟糕,发生了可怕的错误……”),而不是显示包含原始片段的错误代码。
          • 这不是重点。在开发阶段,这些错误意味着什么,有时通知还表明程序错误、设计缺陷或指向意外/未知错误。显然他是 php 新手,应该学习编写好的和干净的代码。
          猜你喜欢
          • 1970-01-01
          • 2012-09-11
          • 2013-03-16
          • 1970-01-01
          • 2021-10-17
          • 2011-04-19
          • 2011-01-30
          • 2011-07-25
          • 1970-01-01
          相关资源
          最近更新 更多