We have previously examined a problem where one of our clients was not able to login to the administrator’s control panel, and we have concluded that the root of the problem is that PHP was unable to write the session information to the filesystem because it doesn’t have the proper permissions.
This problem often happens at an even larger scale when a new Joomla website is installed on a new server. The person installing Joomla will see something like “PHP is trying to open a file (that looks like a session file) but is unable to write to the file”. Obviously, installation cannot continue and the user is stuck.
Some try to solve this problem by doing one of the following:
1- Edit the php.ini file and change the session.save_path value to a directory that exists and that Apache (or IIS) has permissions to write to and read from.
2- Create a different php.ini file and install it under the root directory of the website (this way it will be loaded when the website will be launched).
3- Change the permission of the session directory that php.ini is trying to write to.
We think that both 3 solutions are inefficient, here’s why:
- For solution #1, you must have root access to the whole server in order to do this, and since many Joomla website owners don’t have this privilege, we should forget about this solution.
- For solution #2, you must have the right version of php.ini in order to install under your root directory, because if you don’t, then you may fix the session problem, but you may break almost everything else. And we don’t know of many hosting companies that will give the php.ini file to any of their users, so you will need to guess all the information based on
php_info(); (which is really hard). Solution #2 is probably the most complicated.
- Now if you’re trying to implement solution #3, it means that there’s a 99.99% chance that you can’t implement it. Why? Because if you don’t have access to the original php.ini file, then it means you don’t have permissions to the session write directory specified in php.ini.
So how can this problem be fixed?
It’s very easy, you just do the following:
Step 1 – Login (through FTP) to your website and create a directory called cache and you it the right permissions.
Step 2 – Get the physical path of your website.
Step 3 – Add the function
session_write_path($cache_directory); to the beginning of your index file ($cache_directory is the physical location of your cache direcotry that you created in step #1).