PHP сессии не сохраняются в memcache
Запуск приложения с использованием php 5.4 на AWS с использованием Amazon Linux.
Версия PHP - это PHP 5.4.28. libcache 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
Я могу подключиться по телнету от коробки к конечной точке и порту и правильно подключиться, чтобы экземпляр мог подключиться к серверу memcached.
Вещи, которые мы попробовали:
- Я удалил tcp:// из файла php.ini, и это не имело никакого значения - сессии все еще сохраняются в файлах.
- Мы изменились с session.save_handler="memcache" на session.save_handler="memcached"
- каждый раз, когда мы вносим изменения, мы останавливаем сервер httpd, а затем запускаем его снова
- мы даже пытались перезагрузить серверы
Независимо от того, что мы пробовали, сессии хранятся на диске в /var/lib/php/session. Что-то мне не хватает, или это известная проблема 5.4 или AWS?
2 ответа
Хорошо, нам удалось выяснить проблему.
Сначала мы создали простую страницу, которая выплевывает 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.