【问题标题】:PHP session_start() causing HTTP requests to hangPHP session_start() 导致 HTTP 请求挂起
【发布时间】:2012-12-24 06:31:30
【问题描述】:

我有一个从头开始用 PHP 编写的应用程序。我正在使用 PHP 的本机会话处理函数来处理用户身份验证和持久性。

在开发服务器上进行测试时,一切都很顺利。身份验证、持久性等工作正常。

当安装在生产服务器上时,一切正常,直到用户身份验证 - 当应用程序实际将数据写入会话对象时,突然间,紧随其后的 HTTP 请求在 session_start() 执行时完全挂起。

我怀疑临时会话文件被 PHP 锁定并且从未释放,因此我尝试使用 session_write_close() 跟踪应用程序写入会话对象的位置,但这似乎没有任何效果。

这听起来像是文件锁定问题还是其他问题?如果是这种情况,我对为什么 session_write_close 似乎没有处理文件锁定问题感到困惑,这就是为什么我想知道这里是否还有其他东西在起作用。

任何可能的想法或想法?

回复 Pekka 的好建议:

  • 生产服务器是linux环境。 phpinfo 报告Linux wynn 2.6.18-164.9.1.el5PAE #1 SMP
  • 页面没有调用自己
  • 我可以读/写会话文件夹和文件。我可以看到从身份验证尝试中序列化到文件中的身份验证数据。

【问题讨论】:

  • 这听起来像是配置问题。确保 PHP 报告所有错误,即 error_reporting(E_ALL) 并显示或记录所有错误。 (您甚至可能希望在您的 php.ini 中启用 display_startup_errors) - 报告所有错误可能会阐明正在发生的事情。
  • 是的,好主意 - 这将是我的下一步 - 不幸的是,我的“生产”环境是一个共享主机,我几乎无法控制,但我会联系技术支持看看他们能不能帮我解决这个问题。
  • @andy 您是否接受了我的回答来清理您的列表,或者确实有什么办法?有兴趣知道。
  • @andy 刚刚看到你的评论,干杯。

标签: php session


【解决方案1】:

只是一些想法 - 除了 pygorex 的评论,首先出现 error_reporting,这绝对应该排在第一位。

【讨论】:

  • 将其标记为正确 - 毕竟这不是会话问题,但这些解决方案为我提供了足够的调试空间,我可以完全排除会话问题。谢谢。
  • 在长时间运行的服务器端处理程序中不调用 session_write_close() 是导致它发生的原因。
  • @mattnedrich - 那些无法访问上述 URL 的人。只需从 URL 的开头删除 "de3."
猜你喜欢
  • 1970-01-01
  • 2015-02-04
  • 2019-09-12
  • 2011-05-19
  • 2014-06-27
  • 1970-01-01
  • 2020-01-31
相关资源
最近更新 更多