
How to Extend CodeIgniter Session Expiration Time (Complete Guide)
Last updated 2 weeks, 5 days ago | 39 views 75 5

How to Extend CodeIgniter Session Expiration Time (Complete Guide)
Sessions are crucial for managing user login states, preferences, and temporary data in web applications. In CodeIgniter, session expiration is configurable, but many developers find it tricky to properly extend session duration without introducing security or usability issues.
This guide covers how to extend session expiration in CodeIgniter, with practical steps, a full working example, tips, and common mistakes to avoid.
Why You Might Want to Extend Session Expiry
-
Keep users logged in for longer periods.
-
Prevent session timeouts during lengthy forms or file uploads.
-
Improve user experience in dashboards or internal apps.
Step-by-Step: Extending Session Expiry in CodeIgniter
CodeIgniter’s session configuration can be controlled via the application/config/config.php
file. You can also control session behavior dynamically via code.
✅ Step 1: Locate the Session Configuration File
Open:
/application/config/config.php
Look for the session-related keys:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200; // Default: 2 hours (in seconds)
$config['sess_save_path'] = sys_get_temp_dir();
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
✅ Step 2: Increase sess_expiration
Time
To extend the session to 24 hours, set:
$config['sess_expiration'] = 86400; // 60*60*24
To keep sessions alive until the browser is closed, use:
$config['sess_expiration'] = 0;
✅ Step 3: Update Cookie Expiration (Optional)
Also update cookie timeout if using 'sess_expiration' > 0
:
$config['cookie_lifetime'] = 86400; // Set to match session expiration
✅ Step 4: Regenerate Session Less Frequently (Optional)
This prevents session ID changes that may disrupt long sessions.
$config['sess_time_to_update'] = 3600; // Regenerate session ID every hour
Full Working Example
config.php Snippet
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 86400; // 24 hours
$config['sess_save_path'] = APPPATH.'sessions'; // Make sure directory exists and is writable
$config['sess_time_to_update'] = 3600;
$config['cookie_lifetime'] = 86400;
Create the sessions directory if using the
'files'
driver:
mkdir application/sessions
chmod 0777 application/sessions
Controller Example: Using Session in Code
class Dashboard extends CI_Controller {
public function index() {
$this->load->library('session');
// Set a session variable
$this->session->set_userdata('user_id', 101);
// Access session variable
echo "User ID is: " . $this->session->userdata('user_id');
}
}
Using Session on Another Page
class Profile extends CI_Controller {
public function index() {
$this->load->library('session');
if ($this->session->has_userdata('user_id')) {
echo "Session still active for user: " . $this->session->userdata('user_id');
} else {
echo "Session expired or not found.";
}
}
}
Tips
-
✅ Set
sess_expiration = 0
for login until browser is closed — but not ideal for public computers. -
✅ Use
sess_driver = 'database'
for large or high-traffic apps — more robust than files. -
✅ Ensure your server respects PHP session lifetime:
session.gc_maxlifetime = 86400
(in
php.ini
or via.htaccess
) -
✅ Store session files outside web root for better security if using file driver.
-
✅ Use
remember me
functionality with tokens, rather than just extending sessions indefinitely.
⚠️ Common Pitfalls
-
❌ Only changing CodeIgniter config but not PHP settings: If
php.ini
still expires sessions early (e.g., 1440s), you'll lose session data even withsess_expiration
set higher. -
❌ Not creating or securing the session save path: Especially if using
'files'
driver and customsess_save_path
. -
❌ Session data not persisting? Check browser cookies and ensure
'ci_session'
is not being cleared. -
❌ High
sess_time_to_update
values can delay session ID regeneration, possibly increasing security risk if not handled properly.
Bonus: Forcing Session Expiry Programmatically
You can also manually destroy or extend sessions:
// Destroy session
$this->session->sess_destroy();
// Extend session timeout (temporary)
$this->session->sess_expiration = 172800; // 2 days (in code, per request)
⚠️ Per-request settings do not persist — config settings are recommended for consistency.
Conclusion
Extending session expiration time in CodeIgniter is straightforward — just be sure to update both your CodeIgniter and PHP configurations. Sessions are powerful, but with power comes responsibility — so keep an eye on security when adjusting their lifetimes.