|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2018-05-23 06:53 UTC] Alastair dot Growcott at dynautics dot com
Description:
------------
The exact version is PHP 7.0.30-0ubuntu0.16.04.1 and is running in a Docker container for a website. I got the version running the CLI command though.
My settings are:
session.gc_probability = 0
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
As I understand the documentation, having a probability of 0 means that garbage collection should never happen. However I am finding my session is losing all its values after about 30 minutes (I have never measured it exactly). I increased the gc_maxlifetime value to 144000 and after 5 hours the session was still in existance.
This started happening after a recent rebuild of my Docker container when I moved from one server to another. It looks as if the meaning of a gc_probability value of zero has been changed from "never" to "always".
Test script:
---------------
I haven't tested it, but this should reproduce the problem:
<?php
session_name("Demonstration");
$result = session_start(['cookie_lifetime' => 86400]);
if (!$result) {
echo "Failed to start session.";
} else if (isset($_SESSION['test_value'])) {
echo "Bug didn't happen.";
} else {
echo "Starting new session."
}
?>
Create a website with this script and the settings above. Load the page. Wait about 30 minutes. Load the page again. You can shorten the wait by reducing session.gc_maxlifetime in the configuration.
Expected result:
----------------
On the first load you should see "Starting new session.". On the second load after some time you should see "Bug didn't happen.".
Actual result:
--------------
Instead of "Bug didn't happen." you will see "Starting new session." as the session has been garbage collected.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 09 05:00:02 2025 UTC |
Does the cron job use the gc_maxlifetime value in the php.ini file? The documentation says: ----- session.gc_maxlifetime integer session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and potentially cleaned up. Garbage collection may occur during session start (depending on session.gc_probability and session.gc_divisor). Note: If different scripts have different values of session.gc_maxlifetime but share the same place for storing the session data then the script with the minimum value will be cleaning the data. In this case, use this directive together with session.save_path. ----- There is no mention of the cron job here so if there is a cron job and it is using this value then the documentation needs updating. Also I don't see any sign of any cron job. What user/crontable will it be running under?