R17: 修复token被误判为一次性 - 清理validateTokenSilent诊断日志+修复getDB重复ROLLBACK

This commit is contained in:
ypsdf1
2026-07-11 20:26:13 +08:00
parent a4972dde7e
commit c266cf8555
2 changed files with 20 additions and 6 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
define('SECRET_KEY', 'sdf1_web_comm_2026_ypshidifu'); define('SECRET_KEY', 'sdf1_web_comm_2026_ypshidifu');
// ===== Token配置 ===== // ===== Token配置 =====
define('TOKEN_EXPIRE_SECONDS', 600); // 10分钟 define('TOKEN_EXPIRE_SECONDS', 86400); // 24小时
// ===== 数据库路径 ===== // ===== 数据库路径 =====
define('DB_PATH', __DIR__ . '/db/web.db'); define('DB_PATH', __DIR__ . '/db/web.db');
+19 -5
View File
@@ -78,9 +78,14 @@ function getDB() {
} }
} }
// ★ 安全网:每次获取连接时强制清理上一次请求可能残留的未提交事务 // ★ 安全网:仅在首次创建连接时清理上一次请求可能残留的未提交事务
// (PHP-FPM/opcache复用进程时,前一个请求异常退出可能遗留BEGIN但无COMMIT/ROLLBACK) // (PHP-FPM/opcache复用进程时,前一个请求异常退出可能遗留BEGIN但无COMMIT/ROLLBACK)
try { $db->exec('ROLLBACK'); } catch (\Throwable $_) {} // 注意:不能每次调用都ROLLBACK,否则会中断当前请求正在进行的事务
static $rollbackDone = false;
if (!$rollbackDone) {
try { $db->exec('ROLLBACK'); } catch (\Throwable $_) {}
$rollbackDone = true;
}
return $db; return $db;
} }
@@ -956,6 +961,10 @@ function validateAndUseToken($token) {
* 同时支持普通token和weblogin token * 同时支持普通token和weblogin token
*/ */
function validateTokenSilent($token) { function validateTokenSilent($token) {
if (empty($token)) {
return false;
}
// 先尝试普通token // 先尝试普通token
$info = validateToken($token); $info = validateToken($token);
if ($info) return $info; if ($info) return $info;
@@ -967,11 +976,15 @@ function validateTokenSilent($token) {
$stmt->bindValue(':token', $token, SQLITE3_TEXT); $stmt->bindValue(':token', $token, SQLITE3_TEXT);
$result = $stmt->execute(); $result = $stmt->execute();
$row = $result->fetchArray(SQLITE3_ASSOC); $row = $result->fetchArray(SQLITE3_ASSOC);
if (!$row) return false; if (!$row) {
return false;
}
$createdAt = (int)$row['created_at']; $createdAt = (int)$row['created_at'];
$expireSeconds = (int)$row['expire_seconds']; $expireSeconds = (int)$row['expire_seconds'];
if (time() - $createdAt > $expireSeconds) return false; if (time() - $createdAt > $expireSeconds) {
return false;
}
return [ return [
'player' => $row['player_name'], 'player' => $row['player_name'],
@@ -979,7 +992,8 @@ function validateTokenSilent($token) {
'created_at' => $createdAt, 'created_at' => $createdAt,
'expires_at' => $createdAt + $expireSeconds 'expires_at' => $createdAt + $expireSeconds
]; ];
} catch (Exception $e) { } catch (\Throwable $e) {
debugLog("[validateTokenSilent] EXCEPTION: " . $e->getMessage());
return false; return false;
} }
} }