ソースを参照

fixed auth sesions for postgres

Dmitriev Roman 3 ヶ月 前
コミット
706c517a12

+ 1 - 1
docs/databases/mysql/en/data.sql

@@ -351,7 +351,7 @@ INSERT INTO `config` VALUES (144,37,'/opt/Eye/scripts/sync_mikrotik.pl');
 INSERT INTO `config` VALUES (145,23,'1');
 INSERT INTO `config` VALUES (148,22,'1');
 
-INSERT INTO `version` (`id`, `version`) VALUES(1, '3.0.0');
+INSERT INTO `version` (`id`, `version`) VALUES(1, '3.0.1');
 
 /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
 /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

+ 1 - 1
docs/databases/mysql/ru/data.sql

@@ -351,7 +351,7 @@ INSERT INTO `config` VALUES (144,37,'/opt/Eye/scripts/sync_mikrotik.pl');
 INSERT INTO `config` VALUES (145,23,'1');
 INSERT INTO `config` VALUES (148,22,'1');
 
-INSERT INTO `version` (`id`, `version`) VALUES(1, '3.0.0');
+INSERT INTO `version` (`id`, `version`) VALUES(1, '3.0.1');
 
 /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
 /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

+ 1 - 1
docs/databases/postgres/en/data.sql

@@ -491,7 +491,7 @@ ON CONFLICT (id) DO UPDATE SET
 
 -- System version
 INSERT INTO version (id, version)
-VALUES (1, '3.0.0')
+VALUES (1, '3.0.1')
 ON CONFLICT (id) DO UPDATE SET
     version = EXCLUDED.version;
 

+ 1 - 1
docs/databases/postgres/ru/data.sql

@@ -484,7 +484,7 @@ ON CONFLICT (id) DO UPDATE SET
 
 -- System version
 INSERT INTO version (id, version)
-VALUES (1, '3.0.0')
+VALUES (1, '3.0.1')
 ON CONFLICT (id) DO UPDATE SET
     version = EXCLUDED.version;
 

+ 24 - 4
html/inc/auth.utils.php

@@ -112,11 +112,31 @@ function sess_write($sessionId, $data) {
     log_session_debug($db_link, "Writing session", ['sessionId' => $sessionId, 'data_length' => strlen($data)]);
 
     $time = time();
-    $stmt = $db_link->prepare("INSERT INTO " . SESSION_TABLE . " (id, data, last_accessed)
-        VALUES (?, ?, ?)
-        ON DUPLICATE KEY UPDATE data = ?, last_accessed = ?");
+    $driver = $db_link->getAttribute(PDO::ATTR_DRIVER_NAME);
+    $sql = '';
+    $params = [$sessionId, $data, $time];
+
+    switch ($driver) {
+        case 'mysql':
+            $sql = "INSERT INTO " . SESSION_TABLE . " (id, data, last_accessed)
+                    VALUES (?, ?, ?)
+                    ON DUPLICATE KEY UPDATE data = VALUES(data), last_accessed = VALUES(last_accessed)";
+            break;
+
+        case 'pgsql':
+            $sql = "INSERT INTO " . SESSION_TABLE . " (id, data, last_accessed)
+                    VALUES (?, ?, ?)
+                    ON CONFLICT (id) DO UPDATE SET data = EXCLUDED.data, last_accessed = EXCLUDED.last_accessed";
+            break;
+
+        default:
+            LOG_DEBUG($db_link, "Unsupported database driver: $driver");
+            log_session_debug($db_link, "Session write failed: unsupported driver");
+            return false;
+    }
 
-    $success = $stmt->execute([$sessionId, $data, $time, $data, $time]);
+    $stmt = $db_link->prepare($sql);
+    $success = $stmt->execute($params);
 
     if (!$success) {
         $error = $stmt->errorInfo();