0,'time'=>time()]; $loginErr = $_SESSION[$lockKey]; // 超过5分钟重置计数 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 { $conn = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName); $u = mysqli_real_escape_string($conn, $username); $sql = "SELECT id,username,password,role FROM sys_user WHERE username='$u' LIMIT 1"; $res = mysqli_query($conn, $sql); $user = mysqli_fetch_assoc($res); if ($user && password_verify($pwd, $user['password'])) { // 登录成功,清空错误计数,写入会话 $_SESSION[$lockKey] = ['num'=>0,'time'=>time()]; $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; $_SESSION['login_time'] = time(); // 更新最后登录时间 mysqli_query($conn, "UPDATE sys_user SET last_login=NOW() WHERE id=".$user['id']); header("Location: dashboard.php"); exit; } else { $_SESSION[$lockKey]['num']++; $errMsg = "账号或密码错误"; } mysqli_close($conn); } } ?>