php - Symfony 1.4 session 随机丢失

标签 php session symfony1

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

症状: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/

相关文章:

PHP ORMs : Doctrine vs. 推进

php - WordPress 从 wp_list_categories 中的最后一项删除 <br/> 分隔符

java - Servlet session 倒计时

node.js - req.session 在 POST 请求中未定义 - SailsJS

linq - 使用 LINQ 循环访问 session 变量?

redirect - Symfony中的重定向和转发有什么区别?

php - Laravel API : RegisterController set a default value on creating an User not working

php - 如何捕获 Codeigniter 中的数据库错误

php dns 记录

database - Doctrine/Symfony 丢失 M :N relationships on save