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.218로 전화주세요PHP는 여전히 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를 찾지 못했습니다(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

관련 정보