【发布时间】:2011-02-11 21:51:36
【问题描述】:
问题在于,每隔一段时间,写入 Session 的页面就会导致 apache 在特定会话中永远挂起。一旦某个用户发生此错误,对任何用户的任何会话的任何进一步修改都将导致该用户的网站挂起。
这个问题几天来一直是我唯一关注的问题。我有一个运行 Windows 2003 的开发 VPS 和使用标准 PHP 会话处理程序的默认 XAMPP 最新版本。有问题的代码实际上完美地在另外两台机器上正常运行,所以虽然我的常识说这是一个 Web 服务器配置问题,但在这一点上我愿意尝试任何事情。
经过进一步调查,Apache、PHP 或系统事件日志中没有错误。资源很丰富,没有“AJAX 垃圾风暴”或每页只有几个写入会话。我还尽可能实现了 session_write_close() 以尝试帮助提升问题。
我检查了设置为“C:\windows\Temp”的会话目录,发现一旦用户进入此挂起阶段,相应的会话文件被排他锁定,解决此问题的唯一方法是停止 Apache稍等片刻让文件解锁并删除它们。我不知道是否需要删除。
会话本身仅包含 4 位信息。 ShoppingCartID、UserID、UserLevel 和 Referring URL,由字母数字组成,偶尔带有斜线。
我的 PHP.INI 的 session 部分是这样配置的:
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
我已经尝试了所有我能想到的方法,但现在整个问题对我来说都是模糊的。任何想法都将不胜感激,并感谢您花时间阅读本文:)
【问题讨论】:
-
不需要删除会话文件。重新启动 apache 后,您实际上可以继续会话。
-
我在安装 Apache/Linux 时遇到了完全相同的问题,您找到解决方案了吗?
-
是的,我做了新安装,一切都很好>.>
-
@kmaid - 你必须重新安装什么来解决这个问题?阿帕奇? PHP?
-
我无法弄清楚这个问题。我建议取消基于文件的会话,转而使用 memcached 或数据库。
标签: php windows apache session