PHP会话判断代码引发localhost多次重定向错误求助
问题分析与修复
你的代码存在多个关键错误,直接导致了重定向循环:
- 未启动Session:访问
$_SESSION变量前必须调用session_start(),否则无法读取会话数据,后续判断全无效。 - 非法访问未定义变量:第一行
$uid=$_SESSION['uid'];在uid未设置时会触发PHP警告,且这个赋值完全没必要。 - 逻辑判断彻底混乱:
isset($_SESSION['uid'])==$uid是把布尔值(isset的返回结果)和变量值做比较,永远不会成立,导致第二个分支永远无法执行。- 外层条件
isset($_SESSION['uid'])==false || isset($_SESSION['uid'])==$uid等价于仅判断uid未设置,uid存在时外层条件不成立,不会进入任何分支,若这段代码被错误放在view.php中,会引发循环重定向。
- 重定向后未终止脚本:调用
header("Location: ...")后必须用exit()或die()终止脚本,否则后续代码可能继续执行,触发重复重定向。
修正后的代码
session_start(); // 必须先启动会话 if (!isset($_SESSION['uid'])) { header("Location: login.php"); exit(); // 终止脚本,避免后续代码执行 } else { header("Location: view.php"); exit(); }
额外注意事项
- 这段验证代码应该放在需要权限校验的入口页面(比如首页index.php),不要放在
view.php中,否则uid存在时会一直重定向到自身,再次触发循环。
内容的提问来源于stack exchange,提问作者Sh Husnain
相关产品推荐
相关产品推荐

