This website uses cookies

Our website, platform and/or any sub domains use cookies to understand how you use our services, and to improve both your experience and our marketing relevance.

How To Setup Redis Server As A PHP Session Handler

Updated on December 16, 2021

8 Min Read
setup-redis-as-session-handler-php

What is Redis?

Redis is an open source cache and data storage system, also known as a data structure server because of its advanced support for various data types including hashes, lists, sets, bitmaps and others. It is being used in many web apps for PHP session management, increase site search and load time on the browser.

Setup Redis Server
1. What is Session?
2. PHP Session Handler
3. The Session Life Cycle
4. Prerequisites
5. Running Redis Server
6. Setting Redis As Session Handler
7. The MySQLi Session Handler
8. Future of PHP Session Redis
9. What’s more?

What is Session?

Sessions provides an effective way to store the data of individual users against a unique session ID, as this ID is used to preserve state information of the users between different page requests. PHP session handlers are particularly used in user/web server communicated websites, majorly ecommerce web apps and social networking sites to validate the state of the users logged-in and logged-out of the application. The default behavior of session handler fulfills all your needs in most cases, yet at times, when you want to enhance the functionalities of your apps and store session data differently.

Get Ready for Core Web Vitals Update

Ebook to Speed Up Your Website Before You Start Losing Traffic.

Thank You

Your list is on it’s Way to Your Inbox.

PHP Session Handler

Session handler is responsible for storing and retrieving data from the saved sessions. By default, PHP uses records for this operation. Though it works fittingly well for a single server, but because session information is linked up to a single server, therefore it has some performance and scalability limitations to it.

The outer session handler provides a place for overlapped session data to reside – as they are used in different functions of the aggregate application servers – it becomes highly important when it comes to scaling PHP applications, because this session data is always called to answer queries regardless of any server accessing it.

The Session Life Cycle

When you initiate a session with session_start(), the session’s data file opens up and all the data is temporarily stored into the $_SESSION array. As the execution of script ends, the data is restored back in the file. Hence, when you implement a session variable, it is not quickly stored and goes inside the array for temporary basis. Meanwhile you can also force the session to store data immediately by calling the function session_write_close().

The function session_set_save_handler() overrides the default session handling mechanism with new functionality so that you can store the data according to your own preferences.

To create your own session-handling system, you must use these five functions including, handler_open(), handler_close(), handler_read(), handler_write(), handler_destroy(), and handler_garbage(), respectively. It is important to note that when you define these functions they should be written smartly to accept particular set of parameters, which are:

handler_open($path, $session_name)

$path refers to that path address where the session information is stored as stated in the php.ini file. While the $session_name is the name of that session which is being created in the php.ini file. The main operation of this function is to initiate a new session in PHP and to allow session handler to open any needed resources. If the session is opened successfully, then it returns true otherwise returns false on failure.

handler_close()

This function is called when the session has finished writing something and is now free to release any unwanted resources. The function also allows handler to release that particular resource which is no longer required in the operation.

handler_read($session_id)

This function identifies the current session and returns a string representing that session data with respect to that session id.

handler_write($session_id, $data)

$session_id is a unique identifier for the current session, while the $data is the current data of the session which must be stored. This function utilizes Boolean language to indicate the success or failure, that is true for success and false for the failed attempt.

handler_destroy($session_id)

$session_id is the unique identifier for the current session, which should be destroyed and all its data removed when this function is called.

handler_garbage($max_lifetime)

This function is called at a particular frequency defined by the session.gc_probability configuration directive in php.ini file. It is used to remove unwanted sessions data from the expired sessions. $max_lifetime shows the time limit a session should remain active without being used, before it is considered expired.

All the above defined functions must work as described, and should give the intended functionalities for which they are developed. You can see in this section, these functions are easy to implement as they can either be deployed in a standard procedural fashion or as a method of session-handling object. After developing these functions, register your custom session handler by using the session_set_save_handler() function as follows:

session_set_save_handler($open, $close, $read, $write, $destroy, $garbage);

All the six parameters of the function ‘session_set_save_handler()’ represent a particular function that will be called to execute a specific operation. This function can be represented as a string containing the procedural function, or a method within an object that can be specified. When a method is passed as a reference within an object, an array is passed in which the first entry is the instance of that object, while the second entry is a string having the method name to call within the instance. As the session handler is successfully registered, the session_set_save_handler() function as stated above returns the Boolean true or false value for intended results.

In this tutorial, I will show you how to install Redis on a server, and then use Redis as a session handler for a PHP application on Cloudways.

You might also like: Setting up Laravel Application With Redis Cache

Prerequisites

For the purpose of this tutorial, I assume that you have a PHP application installed on a web server. My setup is:

  • PHP 7.x
  • MySQL
  • Redis

I have used PHP application on a Cloudways managed PHP web hosting server because it gives a highly optimized hosting stack and ensures that you don’t get sidetracked by any server level issue. You can signup for a free account on Cloudways and can setup your server and PHP application within minutes following this GIF:

Running Redis Server

Redis server doesn’t come pre-installed on Cloudways, you have to install php redis manually. To begin installing Redis, first sign in to Cloudways Console and navigate to Server Management Tab and select the Settings and Packages Menu. Go the Packages Tab where you will find Redis installing option. Click on the Install button and your Redis server will be ready within minutes.

install redis

Setting Redis As Session Handler

In order to manage PHP session with Redis, we need to modify the values of two important variables of session that is “session.save_handler” & “session.save_path”. The default value of “session.save_handler” is “file”, so we will change it to “redis”, while the default value of “session.save_path” is “/var/lib/php5/sessions”, so we will change it to the Redis server path which is “tcp://localhost:6379” in PHP.ini file.

session.save_handler = redis

session.save_path    = tcp://127.0.0.1:6379

Since Cloudways doesn’t provide the functionality to edit PHP.ini file directly, so we will have to use the ini_Set() function to modify the values of session handler locally.

Now go to the Server Management Tab and open SSH Terminal. Sign in with the required credentials. Now enter the following command in your Terminal to get to your new folder:

cd applications/rediscache/public_html/

Now type the following command to edit your index.php file.

vi index.php

Now your all sessions are handled by Redis, and you will just need a little PHP script to accumulate all the information in Redis session. Therefore we will be using an easy PHP script to implement counter, as each time you reload the page, it prints the number according to it and that will be incremented with the succeeding attempts. Now to start writing on this file, press the INSERT key and then remove all the existing code on the file and paste the new one, as shown below:

<?php

ini_set('session.save_handler', 'redis');

ini_set('session.save_path', "tcp://localhost:6379");

//echo ini_get('session.save_path');

session_start();

$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;

echo $count;

$_SESSION['count'] = ++$count;

?>

Now press “Esc”, then press “:”and then type “wq” and hit Enter to save and exit the file. Now go to your Application Management Tab and click on URL to run your index.php script. When that script gets executed, it will print 1 as an output and when you will run it again, it will print 2 as an output, showing clearly that your PHP session redis is working properly.

You might also like: Setting up Yii 2 With Redis

The MySQLi Session Handler

Now you have the idea as to you can implement custom session handler using Redis, it’s time for us to move on and see how to implement custom MySQLi session handling system. For this, I will first create a class MySQLi, which will represent all the MySQL-based session. The class will contain a total of seven methods, in which there are six handlers that are specified for particular operations, as described in the previous section, while the remaining one is the constructor. However before understanding the class, let us look at the table that will store following session data as a CREATE TABLE SQL statement:

CREATE TABLE session_data (id varchar(32) primary key,

                          data text,

                          last_updated timestamp);

This session_data table will be used to store all our session-related information.

Future of PHP Session Redis

Redis is touted as the perfect replacement for memcached, because it is much faster, provides scalable functionality to applications and supports different data types. That is why many web giants including Facebook, Twitter, Instagram and others have already replaced memcached with Redis session for its greater and optimized caching functionality. Moreover, many top developers and programmers from the open-source community have already started to contribute in the up-gradation of Redis in different patches.

You might also like: Using Memcached with PHP

What’s more?

Redis is a very comprehensive PHP session management tool and data storage system. Using it just as a PHP session handler seems only the beginning of its immersive functionalities. You can use it for executing quick searches on your site. Just save the keyword as a defined key in your Redis DB, and it will execute the function for you. Whenever a user searches on your site for that keyword, the result loads in a much faster time because it is just retrieving the output from the Redis DB. That is why Redis is the next big thing for optimizing websites, and together with Cloudways Managed PHP Hosting, we recommend it highly as it will provide you optimal results.

Q: How do I end a PHP session?

Ans: You can customize the session’s cookie settings to adjust the behavior of the session to suit your specific needs. The following example sets the session’s cookie lifetime to 1 hour (3600 seconds), whereafter the browser will discard the cookie. Thereafter the browser does no longer transmit a session id, until a new one is obtained via a new session cookie from the server. This is a smart way to auto-invalidate sessions based on time.

Q: How do I start a PHP session?

Ans: You can easily start a PHP session by making a call to the session_start() function. This function first checks if a session is already started and if none is started then it starts one. It is recommended to put the call to session_start() at the beginning of the page.

Q: How long does a session last in PHP?

Ans: The session ending time is automatically defined in php.ini file. By default, it is set to expire after 24 minutes but you can change it according to your preferences in php.ini file. Q: Where are PHP sessions stored?Ans: By default, the sessions are stored on the server side temporary files. You can easily see its location inside the php.ini file. However, you can edit it and change the location where you want.

Share your opinion in the comment section. COMMENT NOW

Share This Article

Shahzeb Ahmed

Shahzeb is a Digital Marketer with a Software Engineering background, works as a Community Manager — PHP Community at Cloudways. He is growth ambitious and aims to learn & share information about PHP & Laravel Development through practice and experimentation. He loves to travel and explore new ideas whenever he finds time. Get in touch with him at [email protected]

×

Get Our Newsletter
Be the first to get the latest updates and tutorials.

Thankyou for Subscribing Us!

×

Webinar: How to Get 100% Scores on Core Web Vitals

Join Joe Williams & Aleksandar Savkovic on 29th of March, 2021.

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Want to Experience the Cloudways Platform in Its Full Glory?

Take a FREE guided tour of Cloudways and see for yourself how easily you can manage your server & apps on the leading cloud-hosting platform.

Start my tour

CYBER WEEK SAVINGS

  • 0

    Days

  • 0

    Hours

  • 0

    Mints

  • 0

    Sec

GET OFFER

For 4 Months &
40 Free Migrations

For 4 Months &
40 Free Migrations

Upgrade Now