Redis を使用した PHP セッション ハンドラーが動作しない

Redis を使用した PHP セッション ハンドラーが動作しない

私は3つのサーバーを設定しました:

192.168.7.147:6379 <-- redis server
192.168.7.162 <-- web server 1 (using phpredis, with local devdomain jttest.com )
192.168.7.218 <-- web server 1 (using phpredis, with local devdomain jttest.com )

192.168.7.162と192.168.7.218の両方を使用してphp.ini設定は次のようになります:

extension=redis.so
session.save_handler = redis
session.save_path = tcp://192.168.7.147:6379

また、これらのオプションを変更した後、ApacheとRedisも再起動しました。もちろん、PHPコード内でRedisの基本機能を使用できます。

問題はここから始まります。PHP標準セッション呼び出し(session_start())を使用して192.168.7.162にログインできますが、192.168.7.218でセッションを取得できず、その逆も同様です。簡単に言えば、Redisセッションは共有されません

192.168.7.147内で、セッションに関連するキーを取得できませんでした(セッション名はPHPREDIS_SESSIONです)。redis-cliから取得した結果を見てください。

redis 127.0.0.1:6379> keys *
1) "attribute"
2) "test"
redis 127.0.0.1:6379>

もう一つ、192.168.7.218phpはredisではなくファイルを使用してセッションを保存します

[root@centos_wira_devel session]# ll
total 8
-rw------- 1 apache apache 792 Feb 26 16:29 sess_1nm86s67o1o696cgopmrc2hq75
-rw------- 1 apache apache 792 Feb 26 16:41 sess_hhmompfoqjh0emoofppg4v5lp2

ちなみに、私のブラウザでは、セッションのクッキー(192.168.7.162と192.168.7.218の両方)が['PHPREDIS_SESSION'] = hhmompfoqjh0emoofppg4v5lp2として保存されています。

phpredisのページでは、このケースに関するFAQは見つかりませんでした(phpredis は、以下の URL からダウンロードできます。)、どこにステップが欠けているか分かりませんでした。

答え1

セッション設定は、php.ini 以外の他の設定ファイルで変更される可能性があります。これは、phpinfo() 出力の「session」セクションをチェックすることで確認できます。列「Local Value」の値が列「Master Value」の値と異なる場合は、他のファイルを検査する必要があります。
具体的には、Centos のサーバー 192.168.7.162 では、/etc/httpd/conf.d/php.conf で session.save_handler が「files」に設定されている可能性が非常に高いです。

答え2

php-fpm の設定も確認してください。長い検査の後、これを見つけました。Linux を使用している場合は、grep設定が変更された場所を見つけてください。たとえば、grep -r "save_handler" /etc/テキスト検索を実行してファイルを表示します。

php_fpm.conf は、

関連情報