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

PHP Sessions handled by Memcached still on disk

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

session.save_handler=memcached

我的期望是,所有会话都应该成功进入 Memcached 并且明确地不是磁盘。

但是,在检查我们的应用程序时,我发现在 Memcached 和 /var/lib/php5/fpm/ 中有会话。

一些故障排除:

  1. 我们肯定会在 Memcached 上设置新会话。但是,我在磁盘上找到的一些会话不会出现在 Memcached
  2. 基于文件的会话的时间戳绝对是最近的 - 当前分钟内有文件。
  3. 文件的权限是针对安装用户的——不是 root。

尽管上面提到了第 3 点,但仍有 SOME 文件具有 root 用户和组所有权。这个我觉得很奇怪。为什么会有 root 拥有的会话?这意味着任何人试图检查该文件(顺便说一下,它具有 0600 权限)都会失败。

所以,我想我的问题是:

  1. 尽管我们使用 Memcached,但在磁盘上创建新会话文件是否有效?
  2. 知道为什么我们会有具有 root 所有权的会话文件吗?

对于上下文: 我正在研究非常零星的会话过期问题。在增加 Memcached 内存限制和并发连接(并最终修复大量实例)之后,我们仍然遇到少量会话过期。无论如何,这只是上下文 - 可能并不重要。

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

编辑

重要的是,cronjob 必须命中一段手动启动会话的代码

PHP5-cli 的配置指令 session.auto_start 必须设置为 true