PHP sessions not being saved in memcache

15,230

Solution 1

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.

Solution 2

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.

Share:
15,230
chris
Author by

chris

Updated on June 04, 2022

Comments

  • chris
    chris almost 2 years

    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?

  • chris
    chris almost 10 years
    We are using the memcache extenstion, which is installed and working correctly for data caches. It's only the sessions that are not working.
  • user3733902
    user3733902 almost 10 years
    Try to use connection url without "tcp://" session.save_path => <elasicache-endpoint>:11211?persistent=1&weight=1&timeout=1&‌​retry_interval=15 => <elasticache-endpoint>:11211?persistent=1&weight=1&timeout=1‌​&retry_interval=15
  • chris
    chris almost 10 years
    Updated the question - we tried this, and it made no difference.
  • user3733902
    user3733902 almost 10 years
    Try to change "memcache" to "memcached" in the php.ini like this : session.save_handler = "memcached"
  • nl-x
    nl-x almost 10 years
    A bit what I said in the comments... look at phpinfo(). Only I was guessing your configuration would be pointing to another php.ini. So did the php.conf file only overwrite the session setting or did it point to another php.ini file?
  • chris
    chris almost 10 years
    @nl-x: the php.conf overrides the settings in php.ini, but only for php run through the web server. That's why we didn't see it running php -i.
  • soipo
    soipo about 8 years
    Absolutely brilliant man, I was getting crazy with this, I am using CentOs7 and I can confirm that there is an override in php.conf.