0, 'time' => time()]; $loginErr = $_SESSION[$lockKey]; if (time() - $loginErr['time'] > 300) { $_SESSION[$lockKey] = ['num' => 0, 'time' => time()]; $loginErr = $_SESSION[$lockKey]; } // 登录提交处理 if ($_POST) { $username = trim($_POST['username'] ?? ''); $pwd = trim($_POST['pwd'] ?? ''); if ($loginErr['num'] >= 5) { $errMsg = "密码错误次数过多,请等待5分钟后重试"; } elseif (!$username || !$pwd) { $errMsg = "账号与密码不能为空"; } else { // 连接monitor权限库查询用户 $connMonitor = mysqli_connect($dbHost, $dbUser, $dbPass, $dbMonitorName); if (!$connMonitor) { $errMsg = "数据库连接失败"; } else { mysqli_set_charset($connMonitor, "utf8mb4"); $u = mysqli_real_escape_string($connMonitor, $username); // 查询完整用户字段:id、账号、密码、角色ID、是否超级管理员 $sql = "SELECT id,username,password,role_id,is_admin FROM sys_user WHERE username='$u' LIMIT 1"; $res = mysqli_query($connMonitor, $sql); $user = mysqli_fetch_assoc($res); // 密码校验(password_hash加密存储) if ($user && password_verify($pwd, $user['password'])) { // 清空错误计数 $_SESSION[$lockKey] = ['num' => 0, 'time' => time()]; // 写入鉴权必需session参数(适配auth.php) $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role_id'] = $user['role_id']; $_SESSION['is_admin'] = $user['is_admin']; $_SESSION['login_time'] = time(); // 更新最后登录时间(monitor库sys_user表) mysqli_query($connMonitor, "UPDATE sys_user SET last_login=NOW() WHERE id=" . $user['id']); mysqli_close($connMonitor); header("Location: dashboard.php"); exit; } else { $_SESSION[$lockKey]['num']++; $errMsg = "账号或密码输入错误"; } mysqli_close($connMonitor); } } } ?>