PHP redis 会话 save_handler 未被使用

PHP redis session save_handler not being used

我已经在 k8s 中的 alpine 容器 运行ning 中安装了 php7-redis 扩展。 添加了一个启用 redis 并设置主机的 conf ini 文件。 这显示在 phpinfo 的输出中,但正在部署的应用程序 (flarum) 似乎没有将其会话保存到 redis。 基本上需要,因为我们想要 运行 flarum 的多个副本。

php信息输出

session
Session Support enabled
Registered save handlers    files user redis rediscluster
Registered serializer handlers  php_serialize php php_binary
Directive   Local Value Master Value
session.auto_start  Off Off
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly no value    no value
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_samesite no value    no value
session.cookie_secure   0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.lazy_write  On  On
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    redis   redis
session.save_path   tcp://flarum-redis-master:6379?auth=<redis-password>
session.serialize_handler   php php
session.sid_bits_per_character  5   5
session.sid_length  26  26
session.upload_progress.cleanup On  On
session.upload_progress.enabled On  On
session.upload_progress.freq    1%  1%
session.upload_progress.min_freq    1   1
session.upload_progress.name    PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix  upload_progress_    upload_progress_
session.use_cookies 1   1
session.use_only_cookies    1   1
session.use_strict_mode 0   0
session.use_trans_sid   0   0

我可以注销 files user rediscluster 只留下 redis 或以其他方式强制使用它吗? 看不到我错过了什么选项或者为什么没有会话被保存到 redis。

我已经测试过使用这个脚本应该可以正常工作

 <?php
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
echo $count;
$_SESSION['count'] = ++$count;

刷新此 test.php 文件会话数据后显示在 redis 中。 flarum 中有什么东西阻止了它的使用吗?

仅供参考 php-fpm 与 nginx 一起使用

这可不像告诉 PHP 使用 Redis 那么简单。 需要扩展来超载内置会话存储。 请参阅 https://discuss.flarum.org/d/25889-how-to-use-redis-for-session-storage

上的讨论

因为我们在 Kubernetes 中,我发现 flarum 在 /flarum/app/storage/sessions 中存储会话文件,所以我在那里安装了一个共享卷,所有副本都可以使用。到目前为止的测试表明这很有效。