Fix CodeIgniter creating a lot of session files

Fix When login CI call sess_regenerate() but do not apply
config 'sess_regenerate_destroy' & always create new file

After this, a session folder have one file by user logged
and clean old session files in storage/sessions folder

To test : in application/config.php
`$config['sess_time_to_update'] = 3;`

see
https://bobcares.com/blog/codeigniter-generating-too-many-sessions-files-resolved
This commit is contained in:
Thomas Ingles 2024-04-30 01:44:20 +02:00 committed by Alex Tselegidis
parent 1788f209eb
commit 97d9219484
2 changed files with 5 additions and 4 deletions

View file

@ -353,7 +353,7 @@ $config['sess_expiration'] = 7200;
$config['sess_save_path'] = __DIR__ . '/../../storage/sessions';
$config['sess_match_ip'] = false;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = false;
$config['sess_regenerate_destroy'] = true;
/*
|--------------------------------------------------------------------------

View file

@ -124,7 +124,7 @@ class CI_Session {
unset($_COOKIE[$this->_config['cookie_name']]);
}
@session_start();
session_start();
// Is session ID auto-regeneration configured? (ignoring ajax requests)
if ((empty($_SERVER['HTTP_X_REQUESTED_WITH']) OR strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest')
@ -137,7 +137,7 @@ class CI_Session {
}
elseif ($_SESSION['__ci_last_regenerate'] < (time() - $regenerate_time))
{
$this->sess_regenerate((bool) config_item('sess_regenerate_destroy'));
$this->sess_regenerate();
}
}
// Another work-around ... PHP doesn't seem to send the session cookie
@ -691,8 +691,9 @@ class CI_Session {
* @param bool $destroy Destroy old session data flag
* @return void
*/
public function sess_regenerate($destroy = FALSE)
public function sess_regenerate($destroy = null)
{
$destroy = (bool) $destroy !== null ? $destroy : config_item('sess_regenerate_destroy');
$_SESSION['__ci_last_regenerate'] = time();
session_regenerate_id($destroy);
}