之前在centos7下已经用yum安装好了php,php-fpm,mysql,nginx,redis。现在开始把php的session交给redis管理。简单配置一下就好。
找到php.ini,找到session.save_handler,session.save_path 修改,auth为密码,没有密码可以不设置,还有数据库等等其他配置。
[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
session.save_handler = redissession.save_path = "tcp://127.0.0.1:6379?auth=123456"
下面的配置还支持分布式的,如果不是超大型网站一般用不到。
;session.save_handler = redis
;session.save_path = "tcp://host1:6379?weight=1, tcp://host2:6379?weight=2&timeout=2.5, tcp://host3:6379?weight=2"
配置完成后重启php-fpm开始测试(我用的yii框架),redis存的session的key默认为'PHPREDIS_SESSION:' +session_id。
$_SESSION['a'] = 'this is session content!';
$id = session_id();
$redis = Yii::$app->redis;
$key = 'PHPREDIS_SESSION:' . $id;$s = $redis->executeCommand('GET', [$key]);
var_dump($s);
发现压根获取不到session值,检查配置没错,我猜配置应该被覆盖了。于是把ini最终值打印下看看
$a = ini_get ("session.save_handler");
$b = ini_get ("session.save_path");
var_dump($a,$b);exit;
发现$a='files',$b='/var/lib/php/session'之前在ini的配置果然被覆盖了,于是去php-fpm里找,发现/etc/php-fpm.d/www.conf里面有覆盖,如下
; Set session path to a directory owned by process user
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
考虑到网站的php都交给php-fpm管理了,于是决定把session也放到php-fpm的配置中,php.ini的修改还原。
; Set session path to a directory owned by process user
;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/lib/php/session
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379?auth=123456"
重启php-fpm后开始之前测试,没有问题。