diff --git a/admin.php b/admin.php index 8f9331a..797e94d 100644 --- a/admin.php +++ b/admin.php @@ -563,10 +563,11 @@ function renderAllUsers(tab, users, onlineSet, onlineMap) { const search = (window.currentSearch || '').toLowerCase(); div.innerHTML = ` -
| 玩家名 | 最后活跃 | 总在线时长 | ||
|---|---|---|---|---|
| 玩家名 | 最后活跃 | 总在线时长 | IP | IP属地 |
| ${p.player_name} | ${loginTime} | ${p.hours_online}小时 | +${ip} | +${ipLoc} |
| 玩家名 | 最后活跃 | 总在线时长 | IP地址 | IP属地 | |||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ${p.player_name} | ${loginTime} | @@ -1209,15 +1233,15 @@ async function loadSameIpTab(tab) { } const groups = r.data; - let html = `
| 玩家名 | IP属地 | 最后登录时间 | |
|---|---|---|---|
| 玩家名 | IP地址 | IP属地 | 最后登录时间 |
| ${p.player_name} | ${p.ip_location || '-'} | ${loginTime} | |
| ${p.player_name} | ${p.ip_address || '-'} | ${p.ip_location || '-'} | ${loginTime} |
当前时间:
+ +⚠️ 表为空!没有玩家被标记为游戏中已登录
+ +| 玩家名 | 登录时间 | 时间戳 |
|---|---|---|
| = htmlspecialchars($p['player_name']) ?> | += date('Y-m-d H:i:s', (int)$p['login_time']) ?> | += $p['login_time'] ?> | +
总数: = $result['online_players_count'] ?>
+ +上次心跳: = date('Y-m-d H:i:s', (int)$result['heartbeat']['last_seen']) ?> (= $result['heartbeat_ago'] ?>)
+ 120) echo '⚠️ 心跳超过120秒,下次同步时PHP会清空online_players表!
'; + elseif ($ago > 60) echo '⚠️ 心跳超过60秒
'; + else echo '✅ 心跳正常
'; + ?> + +⚠️ 无心跳记录
+ + +⚠️ 无Token记录
+ +| 玩家 | 创建时间 | 有效期(秒) |
|---|---|---|
| = htmlspecialchars($t['player_name']) ?> | += $t['created_time'] ?> | += $t['expire_seconds'] ?> | +
⚠️ 无会话记录
+ +| 玩家 | 登录时间 | 时间戳 |
|---|---|---|
| = htmlspecialchars($s['player_name']) ?> | += $s['login_time_str'] ?> | += $s['login_time'] ?> | +
⚠️ 无验证记录
+ +| 玩家 | 验证时间 |
|---|---|
| = htmlspecialchars($v['player_name']) ?> | += date('Y-m-d H:i:s', (int)$v['verified_at']) ?> | +
⚠️ 无注册玩家
+ +| 玩家名 | logged_in |
|---|---|
| = htmlspecialchars($u['player_name']) ?> | += $u['logged_in'] ? '✅ 已登录' : '❌ 未登录' ?> | +
= json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) ?>+ + diff --git a/debug_region.php b/debug_region.php new file mode 100644 index 0000000..cc2d23e --- /dev/null +++ b/debug_region.php @@ -0,0 +1,142 @@ +调试地区搜索"; + +// 1. player_ip_locations 表内容 +echo "
| ip_address | location | player_name | updated_at |
|---|---|---|---|
| " . htmlspecialchars($r['ip_address']) . " | "; + echo "" . htmlspecialchars($r['location']) . " | "; + echo "" . htmlspecialchars($r['player_name']) . " | "; + echo "" . date('Y-m-d H:i:s', $r['updated_at']) . " | "; + echo "
| player_name | new_ip | changed_at |
|---|---|---|
| " . htmlspecialchars($r['player_name']) . " | "; + echo "" . htmlspecialchars($r['new_ip']) . " | "; + echo "" . date('Y-m-d H:i:s', $r['changed_at']) . " | "; + echo "
" . htmlspecialchars($sql) . ""; + +try { + $result = $db->query($sql); + $count = 0; + $players = []; + while ($r = $result->fetchArray(SQLITE3_ASSOC)) { + $count++; + $players[] = $r['player_name']; + } + echo "匹配玩家数: $count
密码由游戏服务器验证,Web端不存储密码
+ +密码由游戏服务器验证,Web端不存储密码
+