The error occurs when PHP cannot start a session because it cannot access the session storage directory (/var/lib/php/session). This is usually due to misconfiguration in php.ini, incorrect permissions, or ownership issues.
Run:
php --ini | grep "Loaded Configuration File"
This will return something like:
Loaded Configuration File: /etc/php/8.0/apache2/php.ini
or
Loaded Configuration File: /etc/php/8.0/fpm/php.ini
If using Nginx, modify the php-fpm version (/etc/php/8.0/fpm/php.ini).
If using Apache, modify the apache2 version (/etc/php/8.0/apache2/php.ini).
sudo nano /etc/php/8.0/apache2/php.ini
or for PHP-FPM:
sudo nano /etc/php/8.0/fpm/php.ini
Find the following lines and ensure they are set correctly:
session.save_handler = files
This tells PHP to use the default file-based session storage.
Find:
session.save_path = "/var/lib/php/session"
If it is missing or empty, add:
session.save_path = "/var/lib/php/session"
session.gc_maxlifetime = 3600
This ensures that sessions do not expire too quickly.
session.use_strict_mode = 1
This prevents session hijacking by enforcing unique session IDs.
Ensure:
session.cookie_secure = 0
session.cookie_httponly = 1
If session.cookie_secure = 1, PHP will not set cookies over HTTP.
If PHP cannot write session files, fix the directory permissions.
sudo chmod -R 770 /var/lib/php/session
For Apache:
sudo chown -R www-data:www-data /var/lib/php/session
For Nginx:
sudo chown -R nginx:nginx /var/lib/php/session
For Apache:
sudo systemctl restart apache2
For Nginx & PHP-FPM:
sudo systemctl restart nginx php8.0-fpm
Try running the session script again.
If old or corrupt session files exist, PHP may fail to start new sessions.
sudo rm -rf /var/lib/php/session/*
Test if sessions work after clearing old data.
If sessions still do not work, check logs.
sudo tail -f /var/log/php8.0-fpm.log
or
sudo tail -f /var/log/apache2/error.log
sudo journalctl -xe | grep php
| Issue | Fix |
|---|---|
| Wrong session directory in php.ini | Set session.save_path = "/var/lib/php/session" |
| Incorrect folder permissions | chmod -R 770 /var/lib/php/session |
| Wrong ownership | chown -R www-data:www-data /var/lib/php/session |
| Corrupt session files | rm -rf /var/lib/php/session/* |
| Web server not restarted after changes | Restart apache2 or php-fpm |
By following these systematic fixes, you can resolve session_start() permission errors and restore PHP session functionality.