session_start挂起

2022-08-30 14:54:24

因为几个小时后,每次您进行session_start时,我们的服务器都会挂起。

出于测试目的,我创建了一个脚本,如下所示:

<?php
session_start();
?>

从控制台调用它挂起,它甚至不能用ctrl-c停止,只有kill -9工作。通过Apache调用它也是如此。 保持为空,但权限绝对没问题,www可以写入,并且还具有所有父文件夹的读取权限。/var/lib/php/session/

根据管理员的说法,服务器上没有进行任何更改,也没有为会话注册特殊代码。服务器是CentOS 4或5,昨天一切都很完美。我们重新启动了服务器并更新了PHP,但没有任何变化。

我已经没有想法了,有什么建议吗?

更新

我们通过将项目移动到另一台服务器来解决此问题,因此,虽然问题仍然存在于一台服务器上,但不再需要立即找到解决方案。不过,我会保持这个问题的开放性,以防有人对将来遇到类似问题的其他人有想法。


答案 1

造成这种情况的原因有很多,以下是其中的一些:

一个。会话文件可以独占方式打开。当文件锁由于某种原因未正确释放时,它会导致在将来的任何脚本执行中无限挂起。解决办法:使用并确保写入函数使用session_start()session_set_save_handler()fopen($file, 'w') instead of fopen($file, 'x')

二.切勿在 php.ini 文件中使用以下文件(熵文件为 “”),这将导致挂起:/dev/randomsession_start()

<?php
ini_set("session.entropy_file", "/dev/random");
ini_set("session.entropy_length", "512");
?>

C. 需要一个要写入的目录。session_start()

您可以在普通用户帐户中运行Apache和PHP。然后,Apache当然必须监听80以外的其他端口(例如,8080)。

请务必执行以下操作: - 创建一个临时目录 - 放入 - 编辑并将session.save_path设置为您刚刚创建的目录PREFIX/tmpphp.iniPREFIX/libphp.ini

否则,您的脚本似乎会“挂起”在 上。session_start()


答案 2

如果这有帮助:

在我的场景中,同时我在Windows上的PHPStorm(IDE)中使用XDebug调试器。我发现有一个明确的原因:每当我从PHPStorm中杀死调试会话时,下次我尝试运行调试会话时,都会挂起。session_start()session_start()

如果这是您的方案,解决方案是确保每次在IDE中终止XDebug会话时重新启动Apache。


推荐