Răsfoiți Sursa

bugfix: fixed API login

Dmitriev Roman 3 luni în urmă
părinte
comite
ccc4d09946
3 a modificat fișierele cu 44 adăugiri și 42 ștergeri
  1. 2 0
      html/api.php
  2. 2 0
      html/inc/auth.php
  3. 40 42
      html/inc/auth.utils.php

+ 2 - 0
html/api.php

@@ -1,5 +1,7 @@
 <?php
 
+$session_init = 0;
+
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.utils.php");
 
 login($db_link);

+ 2 - 0
html/inc/auth.php

@@ -5,6 +5,8 @@ $start_time = microtime();
 
 ob_start();
 
+$session_init=1;
+
 require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.utils.php");
 
 login($db_link);

+ 40 - 42
html/inc/auth.utils.php

@@ -17,23 +17,6 @@ if (!defined("IPCAM_GROUP_ID")) { define("IPCAM_GROUP_ID","5"); }
 if (!defined("SNMP_timeout")) { define("SNMP_timeout","500000"); }
 if (!defined("SNMP_retry")) { define("SNMP_retry","1"); }
 
-// исправление дублирующихся PHPSESSID <<<
-if (isset($_SERVER['HTTP_COOKIE'])) {
-    preg_match_all('/PHPSESSID=([^;\s]+)/', $_SERVER['HTTP_COOKIE'], $matches);
-    if (!empty($matches[1])) {
-        $real_session_id = end($matches[1]);
-        session_id($real_session_id);
-        $_COOKIE['PHPSESSID'] = $real_session_id;
-    }
-}
-
-// Включим подробное логирование сессий
-LOG_DEBUG($db_link, "=== SESSION DEBUG START ===");
-LOG_DEBUG($db_link, "Session status: " . session_status());
-LOG_DEBUG($db_link, "PHP_SESSION_ACTIVE: " . PHP_SESSION_ACTIVE);
-LOG_DEBUG($db_link, "DOCUMENT_ROOT: " . $_SERVER['DOCUMENT_ROOT']);
-LOG_DEBUG($db_link, "REQUEST_URI: " . ($_SERVER['REQUEST_URI'] ?? 'unknown'));
-LOG_DEBUG($db_link, "HTTP_COOKIE: " . ($_SERVER['HTTP_COOKIE'] ?? 'no cookies'));
 
 // Удаляем порт из домена для корректной работы кук
 $domain_parts = explode(':', $_SERVER['HTTP_HOST']);
@@ -54,6 +37,46 @@ ini_set('session.gc_maxlifetime', SESSION_LIFETIME);
 //ini_set('session.use_trans_sid', true);
 //ini_set('session.use_only_cookies', false);
 
+if (!empty($session_init) and $session_init==1) {
+    // Включим подробное логирование сессий
+    LOG_DEBUG($db_link, "=== SESSION DEBUG START ===");
+    LOG_DEBUG($db_link, "Session status: " . session_status());
+    LOG_DEBUG($db_link, "PHP_SESSION_ACTIVE: " . PHP_SESSION_ACTIVE);
+    LOG_DEBUG($db_link, "DOCUMENT_ROOT: " . $_SERVER['DOCUMENT_ROOT']);
+    LOG_DEBUG($db_link, "REQUEST_URI: " . ($_SERVER['REQUEST_URI'] ?? 'unknown'));
+    LOG_DEBUG($db_link, "HTTP_COOKIE: " . ($_SERVER['HTTP_COOKIE'] ?? 'no cookies'));
+    // Инициализация системы сессий
+    log_session_debug($db_link, "Before init_db_sessions");
+    init_db_sessions($db_link);
+    // Инициализация сессии
+    log_session_debug($db_link, "Before session_start check");
+
+    // исправление дублирующихся PHPSESSID <<<
+    if (isset($_SERVER['HTTP_COOKIE'])) {
+	preg_match_all('/PHPSESSID=([^;\s]+)/', $_SERVER['HTTP_COOKIE'], $matches);
+        if (!empty($matches[1])) {
+	    $real_session_id = end($matches[1]);
+    	    session_id($real_session_id);
+            $_COOKIE['PHPSESSID'] = $real_session_id;
+	}
+    }
+
+    if (session_status() !== PHP_SESSION_ACTIVE) {
+	log_session_debug($db_link, "Starting session");
+	session_start();
+        log_session_debug($db_link, "After session_start", [
+	    'session_status' => session_status(),
+            'session_id' => session_id(),
+	    'session_cookie_params' => session_get_cookie_params()
+        ]);
+	} else {
+        log_session_debug($db_link, "Session already active", [
+	    'session_id' => session_id(),
+            'session_status' => session_status()
+	]);
+	}
+    LOG_DEBUG($db_link, "=== SESSION DEBUG END ===");
+    }
 
 // Функция для логирования отладки сессий, нужна только для отладки
 function log_session_debug($db, $message, $data = null) {
@@ -460,28 +483,3 @@ function logout($db, $silent = FALSE, $redirect_url = DEFAULT_PAGE) {
         }
     }
 }
-
-// Инициализация системы сессий
-log_session_debug($db_link, "Before init_db_sessions");
-init_db_sessions($db_link);
-
-// Инициализация сессии
-log_session_debug($db_link, "Before session_start check");
-if (session_status() !== PHP_SESSION_ACTIVE) {
-    log_session_debug($db_link, "Starting session");
-
-    session_start();
-
-    log_session_debug($db_link, "After session_start", [
-        'session_status' => session_status(),
-        'session_id' => session_id(),
-        'session_cookie_params' => session_get_cookie_params()
-    ]);
-} else {
-    log_session_debug($db_link, "Session already active", [
-        'session_id' => session_id(),
-        'session_status' => session_status()
-    ]);
-}
-
-log_session_debug($db_link, "=== SESSION DEBUG END ===");