Сессии PHP не сохраняются в memcache

Запуск приложения с использованием php 5.4 на AWS с использованием Amazon Linux.

Версия PHP – это PHP 5.4.28. memcache lib, установленный из репозитория AWS, – php54-pecl-memcache-3.0.8-1.11.amzn1.x86_64

Я проверил, что php использует /etc/php.ini:

[root@ip-xx.xx.xx.xx]# php -i | grep Config Configuration File (php.ini) Path => /etc Loaded Configuration File => /etc/php.ini 

Параметр показывает, что я должен использовать memcache:

 [root@ip-10-40-17-119 etc]# grep "^session.save" php.ini session.save_handler="memcache" session.save_path="tcp://<elasticache-endpoint>:11211" [root@ip-10-40-17-119 php.d]# php -i | grep session.save session.save_handler => memcache => memcache session.save_path => tcp://<elasicache-endpoint>:11211?persistent=1&weight=1&timeout=1&retry_interval=15 => tcp://<elasticache-endpoint>:11211?persistent=1&weight=1&timeout=1&retry_interval=15 

Я могу установить telnet из коробки в конечную точку и порт и правильно подключиться, чтобы экземпляр мог подключиться к серверу memcached.

Вещи, которые мы пробовали:

  • Я удалил tcp: // из файла php.ini, и это не имело значения – сеансы по-прежнему сохраняются в файлах.
  • Мы изменили с session.save_handler = "memcache" на session.save_handler = "memcached"
  • каждый раз, когда мы вносим изменения, мы останавливаем сервер httpd, а затем запускаем его снова
  • мы даже попытались перезагрузить серверы

Независимо от того, что мы пробовали, сеансы хранятся на диске в / var / lib / php / sessions. Есть ли что-то, что мне не хватает, или это известная проблема 5.4 или AWS?

Хорошо, нам удалось выяснить эту проблему.

Сначала мы создали простую страницу, которая выплевывает phpinfo (). Обратите внимание, что важно, чтобы вы запускали это через веб-сервер – запущенный php -i НЕ включает никаких переопределений, которые может добавить apache.

В разделе сеанса в выводе перечислены все директивы, а также «Локальное значение» и «Главное значение».

Местные значения:

 session.save_handler files session.save_path /var/lib/php/session 

в то время как основные значения имели:

 session.save_handler memcache session.save_path tcp://<endpoint>:11211 

Оказывается, что по умолчанию в файле /etc/httpd/conf.d/php.conf указано переопределение, которое указывает файлы. Кажется, это вещь Redhat / CentOS / Fedora.

Удаление этих значений из php.conf устранило проблему.

Оба основных расширения memcache PHP PECL имеют обработчики сеансов. Либо вам потребуется установить модуль PECL перед использованием.

Обработчик сеанса расширений Memcache PECL включен в php.ini:

 session.save_handler = "memcache" session.save_path = "tcp://memcacheServerAddressHere:11211?persistent=1&weight=2&timeout=2&retry_interval=10" 

Обработчик сеанса расширения Memcached PECL включен в php.ini:

 session.save_handler = "memcached" session.save_path = "memcacheServerAddressHere:11211" 

Обратите внимание, что расширение Memcache позволяет настроить конфигурацию среды Memcache.