You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:39:04