Symfony 1.4会话随机丢失

时间:2012-05-06 14:21:12

标签: php session symfony1

这是我几个月前开始尝试的一个问题,自那以后我一直试图修复但没有成功。

症状:在随机的时间间隔内,symfony会丢失会话信息并注销用户。似乎某种程度上与网站的负载连接。当负载较高时,用户似乎更频繁地退出,甚至可能在30秒内快速发生。

环境:自从这开始以来我改变了很多设置,包括php版本,web服务器,会话存储,symfony版本。这是当前的设置: Ubuntu 10.04,php 5.4.0,symfony 1.4.17,nginx 1.0.15 with FPM。以下是在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会话存储。当然,我们已经开始看到失去的会议。我100%肯定memcached没有内存不足,我已经安装了一个管理工具,而memcached服务器几乎没有使用分配给它的8GB的2%(没有浪费,内存根据需要分配)。  然后我添加了第二个memcached服务器并配置了会话处理程序以使用冗余。这有很大帮助,我很少有任何失去的会议。目前,这是一个可接受的妥协。

2 个答案:

答案 0 :(得分:1)

出于某种原因,memcache似乎偶尔会错过并创建一个新会话,导致用户退出。

正如Jestep所建议的那样,你应该通过从等式中取出memcache来证明这一点,看看问题是否消失了。

如果是这样,那么问题就是你与memcache或memcache本身交谈的方式。

答案 1 :(得分:0)

实际上我们过去几个月一直使用的设置是symfony配置为使用正常的php会话(不是任何缓存类)然后php设置为使用memcache扩展(还有一个名为memcached)将会话存储在2个冗余的memcache服务器上。如果我取出其中一个内存缓存服务器,我们会立即开始查看丢失的会话。

这是真正完成这项工作的唯一设置。