由Memcached处理的PHP会话仍在磁盘上

时间:2016-02-22 15:07:49

标签: php session caching nginx memcached

我们在Nginx下设置了PHP5 FPM。我们使用Memcached作为会话处理程序。

session.save_handler=memcached

我的期望是,尽管有一些致命错误,例如我们的Memcached服务器的死亡,但是所有会话都应该使其成为Memcached并且明确地不是磁盘。

但是,在检查我们的申请后,我在/var/lib/php5/fpm/中找到了关于Memcached AND的会议。

一些故障排除:

  1. 我们肯定会在Memcached上设置新的会话。但是,我在磁盘上找到的一些会话不会出现在Memcached
  2. 基于文件的会话的时间戳肯定是最近的 - 当前分钟有文件。
  3. 文件的权限是针对安装用户的 - 而不是root用户。
  4. 尽管已经说过上述第3点,但仍有 SOME 文件具有root用户和组所有权。这让我觉得很奇怪。为什么会有root所拥有的会话?这意味着任何试图检查文件(具有0600权限btw)的人都会失败。

    所以,我猜我的问题相当于:

    1. 是否存在在磁盘上创建新会话文件有效的情况,尽管我们使用Memcached?
    2. 知道我们为什么会有拥有root权限的会话文件?
    3. 上下文: 我正在研究非常零星的会话到期问题。在增加了Memcached内存限制和并发连接(并最终修复了大量实例)之后,我们仍然会遇到少量的会话到期。无论如何,这只是背景 - 可能并不重要。

1 个答案:

答案 0 :(得分:1)

会话文件由cron启动的php-cli创建。 cli config与fpm one不同,它使用默认文件会话处理程序。

修改

重要的是,cronjob必须要击中一段手动启动会话的代码 的 OR
PHP5-cli的配置指令session.auto_start必须设置为true