PHP7.1本地环境未登录重定向至登录页时出现重定向过多错误求助
解决localhost重定向次数过多的问题
嘿,这个问题我太熟了——本质就是无限重定向循环,咱们一步一步来搞定它:
问题根源
你现在的逻辑是所有PHP页面(包括login.php本身)都引入了header.php,当未登录用户访问login.php时:
header.php启动会话,发现$_SESSION["username"]为空- 触发重定向到
login.php - 加载
login.php时又引入header.php,重复上述步骤,陷入死循环,浏览器就会抛出“redirected you too many times”的错误
两种快速解决方案
方案一:在header.php里排除登录页
修改你的header.php,先判断当前页面是不是login.php,如果是就跳过重定向逻辑:
session_start(); // 获取当前执行的PHP文件名 $currentPage = basename($_SERVER['PHP_SELF']); // 只有非登录页且未登录时,才执行重定向 if ($currentPage !== 'login.php' && empty($_SESSION["username"])) { header("Location: login.php"); exit; // 必须加exit,终止后续代码执行,避免意外 }
方案二:给登录页设置专属标记
在login.php里先定义一个标记变量,再引入header.php,让header.php识别后跳过重定向:
login.php:
// 先设置标记,告诉header.php这是登录页 $isLoginPage = true; // 再引入公共头部 include 'header.php'; // 下面是你的登录页面HTML和登录逻辑...
header.php:
session_start(); // 如果不是登录页且未登录,才重定向 if (!isset($isLoginPage) && empty($_SESSION["username"])) { header("Location: login.php"); exit; }
额外注意事项
- 务必在
header("Location: ...")之后加exit;或die();,不然PHP会继续执行后续代码,可能导致无效跳转 - 确保
session_start();和重定向逻辑在任何输出之前执行(包括HTML标签、空格、echo内容),不然会触发“headers already sent”错误 - 登录验证成功后,一定要正确设置
$_SESSION["username"],比如:// 假设登录验证通过后获取到用户名$username $_SESSION["username"] = $username; // 然后再跳转到首页或其他页面 header("Location: index.php"); exit;
内容的提问来源于stack exchange,提问作者colin
相关产品推荐
相关产品推荐

