session_start挂起

Mor*_*dur 26 php session

因为几次我们的服务器在你每次执行session_start时挂起.

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

<?php
session_start();
?>
Run Code Online (Sandbox Code Playgroud)

从控制台调用它会挂起,甚至无法使用ctrl-c停止,只有kill -9可以正常工作.通过Apache调用它也是一样的./var/lib/php/session/保持空白但权限绝对正常,www可以写入并且还具有所有父文件夹的读取权限.

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

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

UPDATE

我们通过将项目移动到另一台服务器来解决了这个问题,所以当问题仍然存在于一台服务器上时,不再需要解决方案了.我将保持这个问题的开放,以防万一有人对将来遇到类似问题的人有所了解.

Tha*_*ama 25

这有很多原因,这里有一些原因:

A.会话文件可以独占打开.如果由于某种原因未正确释放文件锁定,则会导致session_start()无限期挂起任何未来的脚本执行.解决方法:使用session_set_save_handler()并确保write函数使用fopen($file, 'w') instead of fopen($file, 'x')

B.永远不要在php.ini文件中使用以下内容(entropie文件为" /dev/random"),这将导致你session_start()挂起:

<?php
ini_set("session.entropy_file", "/dev/random");
ini_set("session.entropy_length", "512");
?>
Run Code Online (Sandbox Code Playgroud)

C. session_start()需要一个目录来写.

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

一定要做好以下几件事: -创建一个临时目录PREFIX/tmp -摆php.iniPREFIX/lib -编辑php.ini和session.save_path的设置为您刚刚创建的目录

否则,您的脚本似乎会"挂起" session_start().

  • 你能提供更多关于选项A的细节吗? (2认同)

Dan*_*aum 5

如果这有帮助:

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

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