如何避免PHP会话错误?

问题描述:

Occassionaly我在PHP中运行这个错误,我该如何解决这个问题或者是什么原因造成的?如何避免PHP会话错误?

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

+0

你需要粘贴一些代码;即什么是第0行 – Dirk 2009-08-07 19:03:07

+0

它可能不是第0行,但有些代码会有所帮助。 – 2009-08-07 19:05:58

+0

这是一个艰难的一个我的网站是数百页的编译,但通常我的头文件是第一个,这个错误通常只显示在一些页面上后,我张贴的东西与表格然后重定向到一个页面 – JasonDavis 2009-08-07 19:07:24

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

$mySessionVar = $_session["sessionVar"]; 

,而不是

$sessionVar = $_session["sessionVar"]; 
+0

有趣。我以前从未检查过'session.bug_compat_42'。为你和Gumbo +1。 – zombat 2009-08-07 19:21:07

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

+3

这不是一个好的解决方案。它只会隐藏您的代码问题,并导致未来的问题。 – zombat 2009-08-07 19:18:55

只要按照错误消息的建议禁用session.bug_compat_42session.bug_compat_warn即可。

+1

错误消息存在原因,在开发过程中不应禁用。至少要确保您明白为什么在禁用它之前收到错误消息。 – Otterfan 2009-08-07 19:22:40

+0

好吧,现在我读了立体主义的建议,我明白了为什么你可能会在这种情况下禁用。 – Otterfan 2009-08-07 19:29:44

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

有关该问题的绝佳说明,请参阅此Google Groups后。

编辑:如果依靠register_globals不是,那么你应该注意浓汤和stereointeractive的答案。

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

如果它只发生在某些页面上,您可能需要检查拉入这些页面的所有代码,并搜索在使用前未定义的变量。用调试器浏览这些页面应该有所帮助。

+0

我将消息像错误消息一样存储到会话变量中,如果此会话不为空,则在页面加载中存储消息我显示它,然后在显示它之后立即取消设置会话变量,我注意到此错误有时只会发生,但每次它都会发生在我的一条消息被显示之后是正确的,然后当该错误发生时,它不会在该页面上取消设置 – JasonDavis 2009-08-07 19:19:08