Era Host hosting
EraHost – Free Domain, Cheap Hosting!
Client Area
Support 24/7
Menu

Fixing phpMyAdmin "Error During Session Start" — Complete Guide

9 min read
04.07.2025

1. What Causes This Error?

When phpMyAdmin displays the session start error, it means the application cannot create or access PHP session files due to one or more of these issues:

phpMyAdmin Session Start Error
phpMyAdmin error during session start — same root causes as plain PHP.

For closely related session-start permission topics, see session_start() failed: Permission denied (13), Failed to Read Session Data (read-side), and Verify PHP Configuration (php.ini).

Common Causes:

  • Incorrect permissions on the PHP session directory (/var/lib/php/session)
  • Wrong ownership of session files (owned by wrong user)
  • Misconfigured php.ini session settings
  • Full disk space or corrupt session files
  • SELinux or AppArmor blocking PHP session access
  • PHP cookies disabled in the browser
Important: This error prevents phpMyAdmin from starting sessions, which are essential for user authentication and maintaining login state. Without proper sessions, phpMyAdmin cannot function correctly.

2. Check and Fix PHP Session Directory

Start by identifying and fixing issues with PHP's session directory.

Find Current Session Save Path

Check PHP Session Configuration

# Method 1: Using php -i command
php -i | grep "session.save_path"

# Method 2: Direct PHP command
php -r 'echo session_save_path();'

# Method 3: Check PHP info page
php --info | grep session.save_path

Expected output: session.save_path => /var/lib/php/session

If session.save_path is empty, PHP is using the default /tmp directory.

Ensure the Session Directory Exists

Create Session Directory if Missing

# Create the session directory with proper permissions
sudo mkdir -p /var/lib/php/session

# Verify directory was created
ls -la /var/lib/php/

Fix Directory Permissions and Ownership

Set Correct Permissions for Session Directory

# Set proper permissions (read, write, execute for owner and group)
sudo chmod -R 770 /var/lib/php/session

# For Apache web server (common on Ubuntu/Debian)
sudo chown -R www-data:www-data /var/lib/php/session

# For Nginx web server (common on CentOS/RHEL)
sudo chown -R nginx:nginx /var/lib/php/session

# Verify permissions and ownership
ls -la /var/lib/php/session

Restart Web Services

Restart Web Server to Apply Changes

# For Apache
sudo systemctl restart apache2

# For Nginx with PHP-FPM
sudo systemctl restart nginx php8.0-fpm

# Check service status
sudo systemctl status apache2 --no-pager -l
# or
sudo systemctl status nginx --no-pager -l
Linux VDS
High performance for your projects
  • Root access and flexible setup
  • Control panel
  • NVMe disks
  • DDR5
Linux VDS

3. Verify and Update php.ini Configuration

Check and correct PHP configuration settings.

Locate php.ini Files

Find Active php.ini Configuration File

# Find loaded configuration file
php --ini | grep "Loaded Configuration File"

# Common php.ini locations:
# Ubuntu/Debian: /etc/php/8.0/apache2/php.ini
# Ubuntu/Debian (PHP-FPM): /etc/php/8.0/fpm/php.ini
# CentOS/RHEL: /etc/php.ini
# CentOS/RHEL (PHP-FPM): /etc/php-fpm.d/www.conf

Update Session Settings in php.ini

Edit and Update php.ini File

# Edit php.ini file (replace with your actual path)
sudo nano /etc/php/8.0/apache2/php.ini

# Or for PHP-FPM
sudo nano /etc/php/8.0/fpm/php.ini

# Search for these session settings (use Ctrl+W in nano):
# session.save_handler = files
# session.save_path = "/var/lib/php/session"
# session.gc_maxlifetime = 3600
# session.use_strict_mode = 1
# session.cookie_secure = 0

# After editing, save and exit (Ctrl+X, then Y, then Enter)
Key php.ini Settings:
  • session.save_handler = files - Use files for session storage
  • session.save_path = "/var/lib/php/session" - Path to session directory
  • session.gc_maxlifetime = 3600 - Session lifetime in seconds
  • session.use_strict_mode = 1 - Enhanced session security
  • session.cookie_secure = 0 - Set to 1 if using HTTPS

Apply Configuration Changes

Restart PHP and Web Services

# For Apache with mod_php
sudo systemctl restart apache2

# For PHP-FPM with Nginx/Apache
sudo systemctl restart php8.0-fpm
sudo systemctl restart nginx  # or apache2

# Verify PHP is using the correct settings
php -i | grep session.save_path

4. Clear Old or Corrupt Session Files

Corrupt session files can prevent new sessions from being created.

Remove Existing Session Files

Clear Session Directory Safely

# Remove all session files
sudo rm -rf /var/lib/php/session/*

# Or remove only old session files (older than 1 hour)
sudo find /var/lib/php/session/ -type f -mmin +60 -delete

# Check if directory is empty
ls -la /var/lib/php/session/

If Using /tmp Directory

Clear Temporary Session Files

# Check if PHP is using /tmp
php -r 'echo session_save_path();'

# If empty or shows /tmp, clear PHP session files in tmp
sudo rm -rf /tmp/sess_*
sudo rm -rf /tmp/php_sessions/*

# Create dedicated tmp directory for PHP sessions
sudo mkdir -p /tmp/php_sessions
sudo chmod 770 /tmp/php_sessions
sudo chown www-data:www-data /tmp/php_sessions  # or nginx:nginx
Caution: Clearing session files will log out all currently logged-in users from phpMyAdmin and other PHP applications. Perform this during maintenance periods if possible.

5. Check for Full Disk Space or Inodes

Insufficient disk space prevents PHP from creating new session files.

Check Disk Usage

Monitor Disk Space and Inodes

# Check overall disk usage
df -h

# Check specific partition (usually /var or /)
df -h /var
df -h /

# Check inode usage (important for many small files)
df -i
df -i /var

# Check size of session directory
du -sh /var/lib/php/session/
du -sh /tmp/

Free Up Disk Space

Clean Up Unnecessary Files

# Clean package manager cache
sudo apt clean          # Ubuntu/Debian
sudo yum clean all      # CentOS/RHEL

# Remove old log files
sudo journalctl --vacuum-time=3d
sudo rm -rf /var/log/*.gz
sudo rm -rf /var/log/*.old

# Remove temporary files
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*

# Check largest directories
sudo du -sh /* | sort -rh | head -10
sudo du -sh /var/* | sort -rh | head -10

6. Check SELinux/AppArmor Restrictions

Security modules may be blocking PHP from writing to session directory.

Check SELinux Status

Diagnose SELinux Issues

# Check if SELinux is enabled
sestatus
getenforce

# Check SELinux logs for PHP/httpd denials
sudo grep "denied" /var/log/audit/audit.log | grep php
sudo grep "denied" /var/log/audit/audit.log | grep httpd

# Alternative: Use sealert for detailed analysis
sudo sealert -a /var/log/audit/audit.log | grep -A 10 -B 5 "denied"

Fix SELinux Context for Session Directory

Set Correct SELinux Context

# Apply correct SELinux context to session directory
sudo chcon -R -t httpd_sys_rw_content_t /var/lib/php/session

# Make the change permanent
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/lib/php/session(/.*)?"
sudo restorecon -Rv /var/lib/php/session

# Temporarily disable SELinux for testing (not recommended for production)
sudo setenforce 0
# To re-enable: sudo setenforce 1

Check AppArmor (Ubuntu/Debian)

Diagnose AppArmor Issues

# Check AppArmor status
sudo aa-status

# Check if PHP/phpMyAdmin profiles are enforced
sudo aa-status | grep -i php
sudo aa-status | grep -i apache
sudo aa-status | grep -i nginx

# Put PHP-FPM in complain mode for testing
sudo aa-complain /usr/sbin/php-fpm8.0
sudo aa-complain /usr/sbin/php-fpm

# Check AppArmor logs
sudo dmesg | grep -i apparmor
sudo journalctl -xe | grep -i apparmor

7. Enable Debugging and Check Logs

Enable detailed logging to identify the exact cause.

Enable Debugging in phpMyAdmin

Configure phpMyAdmin for Debugging

# Locate phpMyAdmin config file
# Common locations:
# Ubuntu/Debian: /etc/phpmyadmin/config.inc.php
# CentOS/RHEL: /etc/phpMyAdmin/config.inc.php

# Edit phpMyAdmin configuration
sudo nano /etc/phpmyadmin/config.inc.php

# Add or modify these settings:
$cfg['Debug'] = true;
$cfg['SendErrorReports'] = 'always';
$cfg['ShowPhpInfo'] = true;
ini_set('display_errors', '1');
error_reporting(E_ALL);

# Save and restart web server
sudo systemctl restart apache2  # or nginx

Check Various Log Files

Monitor Relevant Log Files

# Apache error logs
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/httpd/error_log

# Nginx error logs
sudo tail -f /var/log/nginx/error.log

# PHP error logs
sudo tail -f /var/log/php_errors.log
sudo tail -f /var/log/php8.0-fpm.log  # or your PHP version

# System logs
sudo tail -f /var/log/syslog
sudo journalctl -xe -f

# phpMyAdmin specific logs (if configured)
sudo tail -f /var/log/phpmyadmin/error.log

Test PHP Session Functionality

Create Test Script to Verify Sessions

# Create a simple PHP session test script
sudo nano /var/www/html/test_session.php

# Add this content:
<?php
session_start();
$_SESSION['test'] = 'phpMyAdmin session test';
echo "Session ID: " . session_id() . "<br>";
echo "Session test value: " . $_SESSION['test'] . "<br>";
echo "Session save path: " . session_save_path() . "<br>";
echo "Sessions working correctly!";
?>

# Test via browser: http://yourserver/test_session.php
# Or via command line:
php /var/www/html/test_session.php

8. Summary of Fixes

Issue Fix Command/Solution
Session directory missing Create directory sudo mkdir -p /var/lib/php/session
Incorrect folder permissions Set proper permissions sudo chmod -R 770 /var/lib/php/session
Wrong ownership Change ownership sudo chown -R www-data:www-data /var/lib/php/session
Misconfigured php.ini Update session.save_path Edit /etc/php/8.0/apache2/php.ini
Corrupt session files Clear session files sudo rm -rf /var/lib/php/session/*
SELinux blocking access Set SELinux context sudo chcon -R -t httpd_sys_rw_content_t /var/lib/php/session
AppArmor restrictions Put in complain mode sudo aa-complain /usr/sbin/php-fpm8.0
Full disk space/inodes Free up space df -h, df -i, then clean up
PHP configuration error Check PHP logs sudo tail -f /var/log/php_errors.log
Web server misconfiguration Check web server logs sudo tail -f /var/log/apache2/error.log
Troubleshooting Tips:
  • Always work through these fixes in order, starting with the simplest solutions first
  • After each fix, test phpMyAdmin to see if the issue is resolved
  • Check logs after each change to identify any remaining issues
  • Consider browser-related issues - clear browser cache and cookies
  • Ensure time synchronization on server (NTP service running)

By following this comprehensive guide, you should be able to resolve the phpMyAdmin "Error during session start" issue and restore full functionality to your database management interface.

Frequently asked questions
Different. phpMyAdmin can use its own `$cfg['TempDir']` for caches; PHP session files still go to session.save_path. phpMyAdmin's TempDir is rarely the cause of "session start" errors — those are PHP-layer. Fix PHP session config and phpMyAdmin error usually goes away.
Yes, sharing session.save_path. If different users access via different phpMyAdmin URLs but the same backing PHP-FPM pool, they share session files. Mostly fine, but corrupted session from one breaks others. Either: per-vhost session.save_path via .user.ini, or migrate to Redis sessions where each phpMyAdmin user gets isolated keys.
If cookies are domain-scoped wrong (e.g., proxy strips them), session_start succeeds but session ID isn't sent on subsequent requests — looks like session error from UI. Verify proxy forwards Set-Cookie and Cookie headers untouched. nginx `proxy_pass_request_headers on;` and `proxy_set_header Cookie $http_cookie;`.
Session.gc_maxlifetime expired session, and gc_probability ran cleanup mid-session. Solution: raise gc_maxlifetime in php.ini (default 1440s = 24 min) to something more humane like 7200 (2 hours). Or use a more persistent session storage (Redis), where you control TTL explicitly.
Related articles
Fixing session_start() failed: Permission denied (13) — A System Administrator's Guide
Fixing PHP session_start(): Permission Denied (13) Error
Fixing session_start(): Permission Denied (13) — Failed to Read Session Data in PHP