【问题标题】:How can I avoid PHP session errors?如何避免 PHP 会话错误?
【发布时间】:2010-11-17 19:15:08
【问题描述】:

我偶尔会在 PHP 中遇到这个错误,我该如何解决这个问题或者是什么原因造成的?

警告:未知:您的脚本可能依赖于在 PHP 4.2.3 之前存在的会话副作用。请注意,会话扩展不会将全局变量视为数据源,除非启用了 register_globals。您可以通过分别将 session.bug_compat_42 或 session.bug_compat_warn 设置为 off 来禁用此功能和此警告。在第 0 行的未知中

【问题讨论】:

  • 你需要粘贴一些代码;即,第 0 行是什么
  • 它可能不是第 0 行,但一些代码会有所帮助。
  • 这是一个艰难的,我的网站编译了数百页,但通常我的头文件是第一个,这个错误通常只在我用表单发布内容然后重定向到页面后才会出现在某些页面上
  • 我修复了它,当我需要向用户显示自定义消息时,某些页面会在站点范围内显示会话消息,然后显示会话值然后取消设置会话,问题是我通过取消设置会话为其分配一个空白值,现在我使用 unset($_SESSION['sess_msg']);错误消失了

标签: php session


【解决方案1】:

如果您的变量名与会话参数相同,则此版本的 PHP 将错误地识别为程序员错误地依赖 register_globals 来获取会话变量。重命名变量,警告就会消失。

$mySessionVar = $_session["sessionVar"]; 

而不是

$sessionVar = $_session["sessionVar"]; 

【讨论】:

  • 有趣。我以前从未检查过session.bug_compat_42。为你和 Gumbo +1。
【解决方案2】:

您依赖于 PHP 的一个已弃用的功能,称为 register_globals。此功能导致许多安全问题,不应再使用。 PHP 手册讨论了这个in-depth

有关问题的出色描述,请参阅此Google Groups 帖子。

编辑:如果你依赖register_globals,那么你应该注意Gumbo和stereointeractive的回答。

【讨论】:

    【解决方案3】:

    只需按照错误消息的提示禁用 session.bug_compat_42session.bug_compat_warn

    【讨论】:

    • 错误消息的存在是有原因的,不应在开发期间禁用。至少在禁用它之前确保您了解收到错误消息的原因。
    • 好的,既然我阅读了 stereoactive 的建议,我明白为什么你可能会在这种情况下禁用。
    【解决方案4】:

    我不建议您禁用警告或错误消息,这是您可能想要解决的问题。您的变量名称会触发虚假错误消息(请参阅 sterrointerative.com 的答案),或者您尝试使用全局变量而不定义它们(这意味着您可能有看不到的错误)。在我看来,这是您想要解决的一个重要区别。

    如果仅在某些页面上发生这种情况,您可能必须查看拉入这些页面的所有代码,并搜索在使用之前似乎未定义的变量的使用情况。使用调试器单步调试这些页面应该会有所帮助。

    【讨论】:

    • 我将错误消息之类的消息存储到会话变量中,如果此会话不为空,则在页面加载时显示它,然后在显示后立即取消设置会话变量,我注意到此错误仅发生有时,但每次确实发生时,它就在我的一条消息显示之后,然后在发生此错误时也不会在该页面上取消设置
    【解决方案5】:

    error_reporting(0) 禁用所有错误消息。

    【讨论】:

    • 这不是一个好的解决方案。它只会隐藏代码的问题,并导致未来的问题。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2017-06-19
    • 2019-03-31
    • 2011-08-13
    • 2014-05-02
    • 2017-09-25
    • 2013-04-16
    • 1970-01-01
    相关资源
    最近更新 更多