[英]PHP sessions not being saved in memcache
使用Amazon Linux在AWS上使用php 5.4运行应用程序。
PHP版本是PHP 5.4.28。 从AWS repo安装的memcache lib是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服务器。
我们尝试过的事情:
无论我们尝试过什么,会话都存储在磁盘上/ var / lib / php / sessions中。 是否有我遗漏的东西,或者这是一个已知的5.4或AWS问题?
好的,我们设法解决了这个问题。
首先,我们创建了一个吐出phpinfo()的简单页面。 请注意,通过Web服务器运行它是很重要的 - 运行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环境。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.