1

我的脚本创建了一个新的 PHP 会话并立即将用户重定向到另一个页面。

除了服务器空闲一个小时左右后的第一次之外,这每次都能完美运行。在第二次尝试之后,它再次完美运行。服务器空闲后它总是失败,第一次尝试后它总是工作。

编辑 当服务器空闲时,会话不起作用。之后一切正常。

从理论上讲,什么会导致会话在第一次尝试时失败?

我不想在这里发布任何代码,因为只是因为我不知道要发布代码的哪一部分。这是在带有 PHP 5.3 的 IIS 7 上。使用 CGI 和 FastCGI 的结果相同。

编辑 session_start(); 在两个脚本上调用。用户不会看到第一页,因为它会立即重定向到下一页。脚本之间只有不到一秒钟的时间。

4

4 回答 4

2

会话存储在磁盘上。由于没有活动,您的服务器磁盘可能正在停机。然后您的脚本在磁盘完成旋转之前超时。可能的?

于 2012-11-06T14:27:04.773 回答
1

PHP sessions have a time out (if I understand your question correctly) which means they will "reset" after the timeout.

You can check the session.gc_maxlifetime in the php.ini file :)

If I didn't understand properly, then it might be an error in the code itself.

于 2012-11-06T14:24:13.397 回答
0

回答我自己的问题。事实证明,这是由其中一个包含的模块中的旧“功能”引起的。如果会话保持打开超过一个小时,则此“功能”旨在通过调用 session_destroy() 来结束会话。

这导致了当用户尝试登录时,PHP 会注意到旧会话并调用 session_destroy() 的问题。在此之后一切似乎都很好,但没有新的会话变量可以写入会话。PHP 日志中没有任何问题的迹象。

将 session_destroy 更改为 session_unset 解决了这个问题。

于 2012-11-07T10:30:51.730 回答
0

我的脚本创建了一个新的 PHP 会话并立即将用户重定向到另一个页面。

我将您的话解释为:您正在运行第 1 页session_start()header('Location: 'page2.php')但在第 2 页上,在我看来您不再这样做session_start()了。

您需要在将要使用的每个页面上使用 session_start() $_SESSION。换句话说,放置session_start()在所有 PHP 页面的顶部或您计划在每个页面上运行的包含文件中。

于 2012-11-06T14:41:13.150 回答