几个月前我开始尝试解决这个问题,但一直没有成功。
症状:Symfony会在随机时间间隔内丢失会话信息并注销用户。它似乎与站点的负载有关。当负载较高时,用户更容易被注销,甚至可能在30秒内发生。
环境:自从问题出现以来,我已经改变了许多设置,包括php版本、Web服务器、会话存储、Symfony版本。以下是当前的设置: Ubuntu 10.04,php 5.4.0,Symfony 1.4.17,带FPM的nginx 1.0.15。以下是在factories.yml中配置会话存储的方式:
user:
class: myUser
param:
timeout: 86400
use_flash: true
storage:
class: sfCacheSessionStorage
param:
cache:
class: sfMemcacheCache
param:
lifetime: 86400
host: 192.168.1.3
serializer: IGBINARY
mode: compiled
port: 11211
我必须提到,我之前也使用了redis作为会话存储,但仍然遇到了问题。 现在我真的不知道该尝试什么了。是否有其他人经历过类似问题?在这个阶段,任何提示都将不胜感激。
更新: 数月的搜索和无数次尝试后,我认为这可能是并发问题。我们的网站在AJAX请求方面比较重,我已经了解到,除非在会话处理程序中实现适当的锁定机制,否则会导致会话出现问题。 首先,我排除了Symfony的影响,我设置它使用PHP会话。使用默认的文件会话存储时,我从来没有失去过任何会话。然后,我配置php使用memcache会话存储。很明显,我们开始看到失去的会话。我可以百分之百地肯定,memcached没有耗尽内存,我安装了一款管理员工具,而memcached服务器几乎没有使用其分配给它的8GB内存的2%(没有浪费,根据需要分配内存)。 然后我添加了第二个memcached服务器,并配置会话处理程序以实现冗余。这对我帮助很大,我很少丢失会话。目前来看,这是一个可以接受的妥协方案。
ab
复制会话丢失吗? - halfer