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