R17: 修复token被误判为一次性 - 清理validateTokenSilent诊断日志+修复getDB重复ROLLBACK
This commit is contained in:
+1
-1
@@ -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');
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user