[英]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.