PHP会话导致Apache无限期挂起

PHP会话导致Apache无限期挂起,php,windows,apache,session,Php,Windows,Apache,Session,问题是,每隔一段时间,写入会话的页面就会导致apache在特定会话中永久挂起。一旦一个用户出现此错误,对任何用户的任何会话的任何进一步修改都将导致该用户的网站挂起 这几天来,这个问题一直是我唯一关注的焦点。我有一个运行Windows2003的开发VPS和使用标准PHP会话处理程序的默认最新版本的XAMPP。所讨论的代码实际上在另外两台机器上正常运行,所以尽管我的常识认为这是一个web服务器配置问题,但在这一点上,我愿意尝试任何东西 经过进一步调查,Apache、PHP或系统事件日志中没有错误。资

问题是,每隔一段时间,写入会话的页面就会导致apache在特定会话中永久挂起。一旦一个用户出现此错误,对任何用户的任何会话的任何进一步修改都将导致该用户的网站挂起

这几天来,这个问题一直是我唯一关注的焦点。我有一个运行Windows2003的开发VPS和使用标准PHP会话处理程序的默认最新版本的XAMPP。所讨论的代码实际上在另外两台机器上正常运行,所以尽管我的常识认为这是一个web服务器配置问题,但在这一点上,我愿意尝试任何东西

经过进一步调查,Apache、PHP或系统事件日志中没有错误。资源非常丰富,没有“AJAX大便风暴”或每页对会话的写入次数超过几次。我还尽可能实现了session_write_close(),以帮助解决问题

我检查了会话的目录,该目录设置为“C:\windows\Temp”,发现一旦用户进入此挂起阶段,相应的会话文件将以独占方式锁定,解决此问题的唯一方法是停止Apache并等待片刻,以使文件解锁并删除它们。我不想知道是否需要删除

会话本身只包含4位信息。ShoppingCartID、UserID、UserLevel和referering URL都是字母数字,偶尔会有斜杠

My PHP.INI的会话部分的配置如下:

session.save_handler = files
session.save_path = "C:\WINDOWS\Temp"
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4

我已经尝试了我能想到的一切,现在整个问题对我来说都是模糊的。如果您有任何想法,我们将不胜感激,并感谢您花时间阅读本文:)

可能是您的会话文件被Windows锁定或某些php.ini设置未正确完成。请


几乎想说是锁定文件

您的应用程序是否可能在内部再次从同一站点请求页面?您可能遇到某种竞争条件,其中页面a启动,锁定会话,然后以某种方式触发对自身的请求,或者页面B也尝试重新启动会话,该会话现在已锁定,请求挂起


否则,如果挂起是由会话文件被锁定引起的,我建议使用类似于SYSInternal的“”的方法来获取使用该会话文件的进程的列表。

这是不可能的。有几个包含,但没有包含,并且设置了最长执行时间。我99%确信,在您停止并启动apache服务后,apache或PHP会在它离开时锁定。无论如何,我会验证这一点。我也有这个问题,Marc B。我没有找到解决办法,我正在使用centos/unix。我只是更改了我的应用程序,使其不在该部分使用会话。这也是我解决问题的方法。可能值得尝试使用memcache作为会话管理器进行反思php会话设置是默认设置,但save_path除外,这只是共享服务器上的安全风险,而不是。不需要删除会话文件。一旦apache重新启动,您实际上可以继续会话。我在apache/Linux安装中遇到了完全相同的问题,您是否找到了解决方案?是的,我进行了新安装,一切都很好>@kmaid-您必须重新安装什么才能解决此问题?阿帕奇?PHP?我无法解决这个问题。我建议取消基于文件的会话,而使用memcached或数据库。