【问题标题】:PHP Session Variables Undefined ErrorsPHP 会话变量未定义错误
【发布时间】:2011-10-27 08:19:54
【问题描述】:

我最近开发的一个管理网站遇到了一个非常令人沮丧的问题。我将错误处理设置为给自己发送电子邮件,并且在使用系统时随机收到多条“错误:[8] 未定义索引:用户名”消息。但是,我无法确定触发这些错误的确切操作。此外,当错误处理设置为回显时,这些消息不可见,并且网站的功能不受影响。

在我看来,问题是由会话超时引起的,而网站没有正确处理这个问题。但是,当登录名被保留一段时间然后刷新时,它确实会按预期重定向到登录页面而没有错误。

在每一页的最顶部包括:

session_start();

接下来是错误处理代码。然后是第一次检查的安全代码:

if(isset($_SESSION['loggedin']) and isset($_SESSION['username'])) {

如果失败,则调用session_destroy(); 并重定向到登录页面。

我不知道为什么我仍然收到

> Error: [8] Undefined index: username'

当 isset 检查出现在每个页面的标题中时的电子邮件!这些错误的不规则性使我无法调试。

非常感谢您对可能是什么问题的任何见解! 非常感谢:)

【问题讨论】:

  • 你到底得到了什么错误,它指的是哪一行?那一行是什么代码?
  • 是否可能有一个代码路径允许$_SESSION['username']-using 代码在不被会话检查器捕获的情况下执行?可以是绕过会话检查的函数或 include()/require() 脚本。
  • 没有包含这些标头的自主运行的代码。几乎所有的页面和功能都会触发这些错误,而不是一个特别的。所有的头文件和函数库都包含在每个页面的顶部,使用 include() 的
  • 这个错误真的很奇怪;这不是 PHP 错误。 “and”在 PHP 中也不是有效的运算符。
  • 好的,我已将其改为 &&。虽然,这不应该有什么不同,我会认为......

标签: php session timeout


【解决方案1】:

尝试添加到您的调试代码中。让您的调试电子邮件也在文件输出时向您发送 debug_backtrace 调用的输出。通过这种方式,您可以看到从最外层脚本到发生错误的行所采用的确切路径。

【讨论】:

  • 之前没遇到过debug_backtrace,谢谢!我已经添加了,如果可以的话会发布更多信息
  • 145 错误邮件后,仍然没有进一步了解问题! debug_backtrace() 的作用与 $errfile 相同。
  • debug_backtrace() 会返回一个数组给你。最简单的解决方案是通过 print_r 或 var_dump 转储其内容。如果您可以为我们提供输出作为对您的问题的编辑,这可能会有所帮助。
  • 是的,这就是我正在做的事情,尽管数组只有一个索引,即文件名,但它并没有帮助 - 几乎每一页都抛出这些错误。
  • 好吧,没有看到代码,我可以为您提供更多建议。您唯一可以做的另一件事是在整个应用程序中查找 $_SESSION['username'] 或 'username' 或只是用户名,然后查看应用程序中的这些代码行。我仍然不知道 what 会产生这些错误,因为 "> Error: [8] Undefined index: username'" 不是标准的 PHP 错误。我还注意到结尾有一个单引号。你有可能在某处做了 $_REQUEST["username'"] 吗?我还要指出,未定义的索引在 PHP 中会生成警告,而不是错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2018-02-16
  • 2013-04-13
  • 2013-09-17
  • 1970-01-01
  • 2015-03-06
相关资源
最近更新 更多