ping(); } catch (Throwable $e) { // 卷王 token 已失效或配置错误 → 清会话 + 强制显示登录页(避免 login.php 把人踢回 index.php 形成死循环) $_SESSION = []; @session_destroy(); } if (ny_is_auth()) { header('Location: index.php'); exit; } } $cfg = ny_load_config(); $err = ''; $ok = false; if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 登录失败限流:5 次失败锁 10 分钟,防止暴力破解 $throttle = ny_login_throttle_check(); if ($throttle['until'] > time()) { $wait = (int)(($throttle['until'] - time()) / 60) + 1; $err = '尝试次数过多,请 ' . $wait . ' 分钟后再试。'; } else { $user = trim((string)($_POST['username'] ?? $cfg['username'])); $pwd = (string)($_POST['password'] ?? ''); // 允许用户在本页调整账号;密码必须输入 if ($user === '' || $pwd === '') { $err = '请输入账号与密码。'; } else { // 用当前配置的连接信息 + 本页输入的账密做一次卷王登录 $test = $cfg; $test['username'] = $user; $test['password'] = $pwd; try { $client = new SurveyKingClient($test); $client->getToken(true); // 登录成功:把账号与密码写回配置(本地单用户工具,持久化密码以便 token // 失效时平台能自动重新登录卷王,避免后台刷新陷入"未配置账号"的死状态) $cfg['username'] = $user; $cfg['password'] = $pwd; ny_save_config($cfg); ny_login(); ny_login_throttle_reset(); $ok = true; } catch (Throwable $e) { ny_login_throttle_hit(); $err = '登录失败:' . $e->getMessage(); } } } } ?> 登录 · <?= htmlspecialchars(NY_APP_NAME) ?>