微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未使用 PHP redis 会话 save_handler

如何解决未使用 PHP redis 会话 save_handler

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

PHPinfo 输出

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 中,因此我在那里安装了一个所有副本都可以使用的共享卷。到目前为止的测试表明,这很有效。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。