diff --git a/debian/changelog b/debian/changelog index 990d8c99..1c0ddb87 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -hedera-web (25.4.4) stable; urgency=low +hedera-web (25.4.5) stable; urgency=low * Initial Release. diff --git a/package.json b/package.json index ae77234a..fbdf8a4c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hedera-web", - "version": "25.4.4", + "version": "25.4.5", "description": "Verdnatura web page", "license": "GPL-3.0", "repository": { diff --git a/web/db-session-handler.php b/web/db-session-handler.php index bdfd5e3a..d371eaa3 100644 --- a/web/db-session-handler.php +++ b/web/db-session-handler.php @@ -3,6 +3,7 @@ namespace Vn\Web; class DbSessionHandler implements \SessionHandlerInterface { + const UPDATE_INTERVAL = 30; private $db; function __construct($db) { @@ -24,12 +25,23 @@ class DbSessionHandler implements \SessionHandlerInterface { } function write($sessionId, $sessionData) { - $this->db->query( - 'INSERT INTO userSession SET - ssid = #, data = #, lastUpdate = NOW() - ON DUPLICATE KEY UPDATE - data = VALUES(data), lastUpdate = VALUES(lastUpdate)', - [$sessionId, $sessionData]); + $session = $this->db->getObject( + 'SELECT data, lastUpdate < (NOW() - INTERVAL # SECOND) hasToRefresh + FROM userSession WHERE ssid = #', + [self::UPDATE_INTERVAL, $sessionId] + ); + + 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; } @@ -40,8 +52,8 @@ class DbSessionHandler implements \SessionHandlerInterface { function gc($maxLifeTime) { $this->db->query('DELETE FROM userSession - WHERE lastUpdate < TIMESTAMPADD(SECOND, -#, NOW())', - [$maxLifeTime] + WHERE lastUpdate < (NOW() - INTERVAL # SECOND)', + [$maxLifeTime + self::UPDATE_INTERVAL + 1] ); return TRUE; }