这是我几个月前开始试验的问题,从那以后我一直在尝试修复但没有成功。
症状:symfony 在随机的时间间隔内丢失 session 信息并注销用户。它似乎以某种方式与站点的负载有关。当负载较高时,用户注销的频率似乎更高,甚至可能快到 30 秒。
环境:从这开始我改变了很多设置,包括 php 版本、web 服务器、 session 存储、symfony 版本。这是当前设置: Ubuntu 10.04、php 5.4.0、symfony 1.4.17、nginx 1.0.15 和 FPM。以下是在 factory.yml 中配置 session 存储的方式:
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 进行 session 存储,但仍然有问题。 我真的不知道接下来要尝试什么。还有其他人经历过类似的事情吗?在此阶段,我们将不胜感激任何提示。
更新: 经过几个月的搜索和无数次的试验和错误,我认为这可能是一个并发问题。我们的网站非常依赖 AJAX 请求,我了解到除非在 session 处理程序中实现适当的锁定机制,否则它可能会导致 session 出现问题。 首先,我从等式中删除了 symfony,我将其设置为使用 php session 。使用默认的文件 session 存储,我永远不会丢失任何 session 。然后我将 php 配置为使用 memcache session 存储。可以肯定的是,我们已经开始看到丢失的 session 。我 100% 肯定 memcached 没有内存不足,我安装了一个管理工具,memcached 服务器几乎没有使用分配给它的 8GB 内存的 2%(没有浪费,内存是根据需要分配的)。 然后我添加了第二个 memcached 服务器并将 session 处理程序配置为使用冗余。这很有帮助,我很少有丢失的 session 。目前这是一个可以接受的妥协。
最佳答案
出于某种原因,memcache 似乎时不时地错过并创建一个导致用户注销的新 session 。
正如 Jestep 所建议的,您应该通过将 memcache 排除在等式之外来证明这一点,看看问题是否消失。
如果是这样,那么问题要么是您与内存缓存的通信方式,要么是内存缓存本身。
关于php - Symfony 1.4 session 随机丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471236/