Skip to content

Commit

Permalink
Add session garbage collector check (#16448)
Browse files Browse the repository at this point in the history
### What does it do?
It often happens that the `modx_session` table grows uncontrollably (I
have seen up to 5 gigabytes), which sometimes leads to complete
non-operation of both the site and the server.

I added session garbage collector check in installer.


![gc_installer_warn](https://user-images.githubusercontent.com/12523676/196445992-6b161c2c-519e-4cc4-bbe4-5ee67e60d150.png)

### Why is it needed?
That there were no problems with overflow of the table `modx_session`.

### How to test
Make the installation from scratch by changing the
`session.gc_probability, session.gc_divisor` parameters.

### Related issue(s)/PR(s)
#16287
#16275
  • Loading branch information
Ruslan-Aleev committed Mar 25, 2024
1 parent 218e56c commit 70cca64
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
18 changes: 18 additions & 0 deletions setup/includes/test/modinstalltest.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public function run($mode = modInstall::MODE_NEW)
$this->_checkConfig();
$this->_checkDatabase();
$this->_checkSuhosin();
$this->_checkSessionsGarbageCollector();
$this->_checkNoCompress();
$this->_checkDocumentRoot();

Expand Down Expand Up @@ -555,6 +556,23 @@ public function _checkSuhosin()
$this->install->settings->store();
}

/**
* Check sessions garbage collector
*/
protected function _checkSessionsGarbageCollector()
{
$status = 'success';
$gc_probability = (int)@ini_get('session.gc_probability');
$gc_divisor = (int)@ini_get('session.gc_divisor');

if (!$gc_probability) {
$status = @ini_set('session.gc_probability', 1) !== false ? 'success' : 'fail';
}

$this->title('session_gc', $this->install->lexicon('test_session_gc'));
$this->warn('session_gc', '', $this->install->lexicon("test_session_gc_$status", ['gc_probability' => $gc_probability, 'gc_divisor' => $gc_divisor]));
}

/**
* Check if the user requested css/js compression to be off, regardless of Suhosin check result.
* Force css/js compression to be off if the option was checked during install (adv options).
Expand Down
4 changes: 3 additions & 1 deletion setup/lang/en/default.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,9 @@
$_lang['test_php_version_fail'] = 'You are running on PHP [[+version]], and MODX Revolution requires PHP 4.3.0 or later';
$_lang['test_php_version_sn'] = 'While MODX will work on your PHP version ([[+version]]), usage of MODX on this version is not recommended. Your version of PHP is vulnerable to numerous security holes. Please upgrade to PHP version is 4.3.11 or higher, which patches these holes. It is recommended you upgrade to this version for the security of your own website.';
$_lang['test_php_version_start'] = 'Checking PHP version:';
$_lang['test_sessions_start'] = 'Checking if sessions are properly configured:';
$_lang['test_session_gc'] = 'Checking if <a href="https://www.php.net/manual/en/session.configuration.php#ini.session.gc-probability" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">sessions garbage collector</a> are properly configured: ';
$_lang['test_session_gc_fail'] = 'The sessions garbage collector does not start! The current configuration "session.gc_probability" is set to [[+gc_probability]] and "session.gc_divisor" is set to [[+gc_divisor]]. <br>By default, MODX stores sessions in the database, so misconfiguration of these options can cause the session table to grow in size.';
$_lang['test_session_gc_success'] = 'OK! The current configuration "session.gc_probability" is set to [[+gc_probability]] and "session.gc_divisor" is set to [[+gc_divisor]]. <br>By default, MODX stores sessions in the database, so misconfiguration of these options can cause the session table to grow in size.';
$_lang['test_table_prefix'] = 'Checking table prefix `[[+prefix]]`: ';
$_lang['test_table_prefix_inuse'] = 'Table prefix is already in use in this database!';
$_lang['test_table_prefix_inuse_desc'] = 'Setup couldn\'t install into the selected database, as it already contains tables with the prefix you specified. Please choose a new table_prefix, and run Setup again.';
Expand Down
6 changes: 4 additions & 2 deletions setup/lang/en/test.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
$_lang['test_php_version_fail'] = 'You are running on PHP [[+version]], and MODX Revolution requires PHP [[+required]] or later. Please upgrade PHP to at least [[+required]]. MODX recommends upgrading to the current stable branch [[+recommended]] for security reasons and future support.';
$_lang['test_php_version_start'] = 'Checking PHP version:';
$_lang['test_php_version_success'] = 'OK! Running: [[+version]]';
$_lang['test_sessions_start'] = 'Checking if sessions are properly configured:';
$_lang['test_session_gc'] = 'Checking if <a href="https://www.php.net/manual/en/session.configuration.php#ini.session.gc-probability" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">sessions garbage collector</a> are properly configured: ';
$_lang['test_session_gc_fail'] = 'The sessions garbage collector does not start! The current configuration "session.gc_probability" is set to [[+gc_probability]] and "session.gc_divisor" is set to [[+gc_divisor]]. <br>By default, MODX stores sessions in the database, so misconfiguration of these options can cause the session table to grow in size.';
$_lang['test_session_gc_success'] = 'OK! The current configuration "session.gc_probability" is set to [[+gc_probability]] and "session.gc_divisor" is set to [[+gc_divisor]]. <br>By default, MODX stores sessions in the database, so misconfiguration of these options can cause the session table to grow in size.';
$_lang['test_simplexml'] = 'Checking for SimpleXML:';
$_lang['test_simplexml_nf'] = 'Could not find SimpleXML!';
$_lang['test_simplexml_nf_msg'] = 'MODX could not find SimpleXML on your PHP environment. Package Management and other functionality will not work without this installed. You may continue with installation, but MODX recommends enabling SimpleXML for advanced features and functionality.';
Expand All @@ -48,4 +50,4 @@
$_lang['test_table_prefix_nf'] = 'Table prefix does not exist in this database!';
$_lang['test_table_prefix_nf_desc'] = 'Setup couldn\'t install into the selected database, as it does not contain existing tables with the prefix you specified to be upgraded. Please choose an existing table_prefix, and run Setup again.';
$_lang['test_zip_memory_limit'] = 'Checking if memory limit is set to at least 24M for zip extensions: ';
$_lang['test_zip_memory_limit_fail'] = 'MODX found your memory_limit setting to be below the recommended setting of 24M. MODX attempted to set the memory_limit to 24M, but was unsuccessful. Please set the memory_limit setting in your php.ini file to 24M or higher before proceeding, so that the zip extensions can work properly.';
$_lang['test_zip_memory_limit_fail'] = 'MODX found your memory_limit setting to be below the recommended setting of 24M. MODX attempted to set the memory_limit to 24M, but was unsuccessful. Please set the memory_limit setting in your php.ini file to 24M or higher before proceeding, so that the zip extensions can work properly.';

0 comments on commit 70cca64

Please sign in to comment.