登录页面无法显示求助:login.php前置PHP代码故障排查
登录页面无法显示的故障排查与修复
核心故障原因及修复方案:
致命问题:无限重定向循环
代码里这段逻辑完全搞反了方向:if (!isset($_SESSION['access_level'])) { header('Location: login.php'); exit(); }当用户未登录访问
login.php时,$_SESSION['access_level']肯定不存在,这段代码会强制重定向到login.php本身,形成无限循环——浏览器永远没法加载到显示登录表单的代码,直接导致页面无法显示。直接删除这段代码即可解决核心问题。Session参数设置顺序错误
session_set_cookie_params(0)必须放在session_start()之前调用,否则会话Cookie的设置不会生效,正确顺序应该是:session_set_cookie_params(0); session_start();未闭合的PHP代码块
代码最后用于显示登录表单的else分支,只打开了PHP标签却没闭合,会触发语法错误。需要在登录表单的HTML代码结束后补充<?php } ?>来闭合这个分支。开发阶段建议开启错误提示
临时在代码开头加上以下代码,方便实时排查语法或运行错误:error_reporting(E_ALL); ini_set('display_errors', 1);
修复后的简化核心代码示例:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); session_set_cookie_params(0); session_start(); $accounts = array( 'admin' => 'admin', 'publisher' => 'publisher', 'customer' => 'customer' ); $error = ''; // 处理登录提交 if (isset($_POST['username']) && isset($_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; if (isset($accounts[$username]) && $accounts[$username] == $password) { $_SESSION['access_level'] = $username; // 统一跳转逻辑 $target = ($username == 'customer') ? 'Products.php' : 'EmployeeArray.php'; header("Location: {$target}"); exit; } else { $error = 'Invalid username or password.'; } } // 已登录则直接展示欢迎信息 if (isset($_SESSION['access_level'])) { $role = $_SESSION['access_level']; echo "Welcome, {$role}! <a href='LogoutQuestion.php'>Log out</a>"; } else { // 未登录显示登录表单 ?> <!-- 这里放你的登录表单HTML代码 --> <form method="post"> <div><?php echo $error; ?></div> <input type="text" name="username" placeholder="Username"> <input type="password" name="password" placeholder="Password"> <button type="submit">Login</button> </form> <?php } ?>
内容的提问来源于stack exchange,提问作者Rachel Brinkley
相关产品推荐
相关产品推荐

