Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP sessions not being saved in memcache

Running an application using php 5.4 on AWS using the Amazon Linux.

PHP version is PHP 5.4.28. memcache lib installed from the AWS repo is php54-pecl-memcache-3.0.8-1.11.amzn1.x86_64

I have verified that php is using /etc/php.ini:

[[email protected]]# php -i | grep Config
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

The setting show that I should be using 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

I can telnet from the box to the end point & port and connect properly, so the instance is able to connect to the memcached server.

Things that we have tried:

  • I have removed the tcp:// from the php.ini file, and that made no difference - sessions are still getting saved in files.
  • We have changed from session.save_handler="memcache" to session.save_handler="memcached"
  • each time we make a change, we stop the httpd server, and then start it again
  • we have even tried rebooting the servers

Regardless of what we've tried, sessions are stored on disk to /var/lib/php/sessions. Is there something I'm missing, or is this a known 5.4 or AWS issue?

like image 363
chris Avatar asked Jun 12 '14 12:06

chris


2 Answers

OK, we managed to figure out the issue.

First, we created a simple page that spit out phpinfo(). Note that it is important that you run this thru the web server - running php -i DOES NOT include any overrides that apache may add.

Under the session section, the output lists all the directives, and a "Local Value" and a "Master Value".

The local values had:

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

while the master values had:

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

It turns out that there's an override installed by default in /etc/httpd/conf.d/php.conf that specifies the files. This appears to be a Redhat/CentOS/Fedora thing.

Removing those values from php.conf fixed the problem.

like image 160
chris Avatar answered Nov 15 '22 16:11

chris


Both of the major memcache PHP PECL extensions have session handlers. Either will require you to install a PECL module before use.

The Memcache PECL extension session handler is enabled with the following in php.ini:

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

The Memcached PECL extension session handler is enabled with the following in php.ini:

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

Note that the Memcache extension appears to allow more configuration of the Memcache environment.

like image 9
user3733902 Avatar answered Nov 15 '22 16:11

user3733902