APC打开时的会话问题

时间:2010-08-23 11:38:39

标签: php apache session apc

在我们的服务器上启用APC时,我们遇到PHP会话问题。

该应用程序在没有APC的情况下运行良好。但是,由于我们启用了APC,当服务器负载很重时,会话似乎变得混乱,即用户随机登录为另一个。一旦我们禁用APC,一切都会恢复正常。我们似乎找不到任何有相同问题的人,除了这些人的相关问题(set-cookie在MS ASP中缓存):http://msdn.microsoft.com/en-us/magazine/cc163577.aspx#S2

其他人有类似的经历吗?你能推荐一些建议吗?

PS:我们所有的会话都是由php.ini中的文件处理的。我们也在运行apache2。

4 个答案:

答案 0 :(得分:2)

我们在这里遇到类似的问题。 APC在这一点上只是一个主要的嫌疑人,因为它很难再现。

我们正在使用带有会话管理的Zend Framework,理论是Zend的代码缓存在APC中,当系统处于严重负载时,代码使用的是先前缓存的SID而不是当前缓存的SID。

我们的安全措施是将会话ID保存在会话数据中,并在检索会话时比较值。如果ID不同,我们会销毁会话并退出。

答案 1 :(得分:0)

请确认apc确实混淆了数据...... 唯一可能的我可以想到什么时候会发生这种情况,当它变满并进行堆栈溢出时。 请检查用法和maby增加缓存大小。

答案 2 :(得分:0)

在保存会话数据之前,自定义会话处理对象被销毁的问题出现了问题。它可能与您的问题无关,但在常规PHP关闭之前显式调用session_write_close会修复该问题。

你的问题听起来有点不同,但我可以确认问题确实存在。

答案 3 :(得分:0)

为了完成这篇文章,我们成功地用三件事来减少这个问题:

1)我们进行了额外的检查,以确保IP与会话ID匹配,否则注销用户。然后,我们可以使用它来跟踪问题发生的频率。

2)我们切换到XCache并立即看到较少数量的混淆会话ID。然而,在非常沉重的负荷下,这个问题又重新抬头了。

3)然后我们在php配置(xcache.size和xcache.var_size)中为Xcache加倍内存,现在问题就消失了。

因此我们怀疑APC或Xcache内存不足是问题所在。我们还在等着看这是否是一个永久的解决方案。