PHP+MySQL站点登录后如何在所有页面的公共header中调用显示用户名
问题核心原因
- 登录验证成功后未将用户名写入
$_SESSION全局变量,跨页面无法共享登录状态 - 没有统一处理session开启逻辑,登录状态判断仅在提交登录的POST请求时生效,普通页面访问时不触发
- 登录成功后未做跳转,刷新页面会丢失POST提交的登录参数
具体修改步骤
1. 统一开启session
在header.php的最顶部第一行添加session_start();,确保所有引入header的页面都能正确读取session,注意该语句前不能有任何输出(包括空格、HTML标签、echo输出等)。
修改后header.php开头代码:
<?php session_start(); include("conexion.php"); // 后面保留原有逻辑
2. 登录成功后写入session
在header.php的登录验证成功分支(if($can == 1)代码块)中,添加session存储逻辑,同时打开跳转逻辑、删除跳转前的echo输出(避免header跳转报错):
if($can == 1) { // 写入session保存登录状态 $_SESSION['usuar'] = $u; $_SESSION['id_user'] = $b['id']; // 按需存储用户ID,对应你用户表中的字段名 // 登录成功跳转首页,避免表单重复提交 header('location:indexph.php'); exit(); // 跳转后终止后续代码执行 }
3. 公共header处添加用户名展示逻辑
找到header.php中你标注要显示用户名的注释位置,添加如下代码:
<!---here i would like to call my username so it shows in every page that calls header.php----> <?php if(isset($_SESSION['usuar'])): ?> <span>欢迎您,<?php echo $_SESSION['usuar']; ?></span> <form action='logout.php' method='POST' style="display: inline;margin-left: 10px;"> <button type='submit' name='logo'>Logout</button> </form> <?php else: ?> <a href="user.php">请登录</a> <?php endif; ?>
4. 清理冗余代码
indexph.php中的session_start();以及判断session输出的代码可以删除,session已经在header中统一处理,用户名也已经在header中统一展示。
补充注意事项
- 你当前使用的
mysql_*系列函数在PHP5.5之后已经废弃,高版本PHP已经完全移除,建议替换为mysqli或者PDO扩展 - 现有SQL查询存在SQL注入风险,建议对输入的用户名密码做过滤,或者使用预处理查询
logout.php需要添加session销毁逻辑,代码参考:
<?php session_start(); session_unset(); session_destroy(); header('location:user.php'); exit(); ?>
内容的提问来源于stack exchange,提问作者LeandroDiaz96
相关产品推荐
相关产品推荐

