使用 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

有關信息,在我的瀏覽器中,會話的 cookie(192.168.7.162 和 192.168.7.218)保存為 ['PHPREDIS_SESSION'] = hhmompfoqjh0emoofppg4v5lp2

在 phpredis 頁面中我沒有找到任何關於此案例的常見問題解答(https://github.com/phpredis/phpredis),我不知道我缺少的步驟在哪裡。

答案1

除 php.ini 之外,其他設定檔中的會話設定可能會變更。這可以透過檢查 phpinfo() 輸出的“session”部分來確認。如果「本地值」列中的值與「主值」列中的值不同,則必須檢查其他文件。
特別是在 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/它將進行文字搜尋並顯示檔案。

/etc/php-fpm.d/www.conf

相關內容