fix(slowness): refs #8886 reduce session table updates

This commit is contained in:
Juan Ferrer 2025-04-08 13:23:30 +02:00
parent 5b968b6e46
commit 3c552c86c7
3 changed files with 22 additions and 10 deletions

2
debian/changelog vendored
View File

@ -1,4 +1,4 @@
hedera-web (25.4.4) stable; urgency=low hedera-web (25.4.5) stable; urgency=low
* Initial Release. * Initial Release.

View File

@ -1,6 +1,6 @@
{ {
"name": "hedera-web", "name": "hedera-web",
"version": "25.4.4", "version": "25.4.5",
"description": "Verdnatura web page", "description": "Verdnatura web page",
"license": "GPL-3.0", "license": "GPL-3.0",
"repository": { "repository": {

View File

@ -3,6 +3,7 @@
namespace Vn\Web; namespace Vn\Web;
class DbSessionHandler implements \SessionHandlerInterface { class DbSessionHandler implements \SessionHandlerInterface {
const UPDATE_INTERVAL = 30;
private $db; private $db;
function __construct($db) { function __construct($db) {
@ -24,12 +25,23 @@ class DbSessionHandler implements \SessionHandlerInterface {
} }
function write($sessionId, $sessionData) { function write($sessionId, $sessionData) {
$this->db->query( $session = $this->db->getObject(
'INSERT INTO userSession SET 'SELECT data, lastUpdate < (NOW() - INTERVAL # SECOND) hasToRefresh
ssid = #, data = #, lastUpdate = NOW() FROM userSession WHERE ssid = #',
ON DUPLICATE KEY UPDATE [self::UPDATE_INTERVAL, $sessionId]
data = VALUES(data), lastUpdate = VALUES(lastUpdate)', );
[$sessionId, $sessionData]);
if (!isset($session)
|| $sessionData !== $session->data
|| $session->hasToRefresh) {
$this->db->query(
'INSERT INTO userSession SET
ssid = #, data = #, lastUpdate = NOW()
ON DUPLICATE KEY UPDATE
data = VALUES(data), lastUpdate = VALUES(lastUpdate)',
[$sessionId, $sessionData]);
}
return TRUE; return TRUE;
} }
@ -40,8 +52,8 @@ class DbSessionHandler implements \SessionHandlerInterface {
function gc($maxLifeTime) { function gc($maxLifeTime) {
$this->db->query('DELETE FROM userSession $this->db->query('DELETE FROM userSession
WHERE lastUpdate < TIMESTAMPADD(SECOND, -#, NOW())', WHERE lastUpdate < (NOW() - INTERVAL # SECOND)',
[$maxLifeTime] [$maxLifeTime + self::UPDATE_INTERVAL + 1]
); );
return TRUE; return TRUE;
} }