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

PHP如何将POST数据传递到另一会话?登录后非账号字段传值失败如何解决

故障根本原因

你的代码执行顺序完全颠倒了:

  • 开头的SESSION赋值、跳转逻辑,运行在数据库查询逻辑之前
  • 用户提交登录表单时,初始$_POST里只有表单输入的email和password两个字段,开头的SESSION赋值阶段只会把这两个值写入SESSION
  • 检测到$_POST["password"]存在后,代码直接跳转页面并退出,后面查询数据库、写入其他$_POST字段的逻辑根本没有执行机会

修复方案

把SESSION赋值和跳转的逻辑,移动到数据库匹配到合法用户之后即可,参考修改后的代码:

<?php
session_start();
require "MySQLConnectionInfo.php";

$error = "";
// 先处理登录提交逻辑
if (isset($_POST["email"]) && isset($_POST["password"]) && $_POST["email"] != "" && $_POST["password"] != "") {
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$database", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // 优化:不要全表查询,直接用WHERE条件过滤目标用户,性能更高
        $stmt = $pdo->prepare("SELECT firstName, lastName, email, phone, sin, password FROM employee WHERE email = ? AND password = ?");
        $stmt->execute([$_POST["email"], $_POST["password"]]);
        $user = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($user) {
            // 匹配到用户后直接写入SESSION,不需要再修改$_POST
            $_SESSION["firstName"] = $user["firstName"];
            $_SESSION["lastName"] = $user["lastName"];
            $_SESSION["phone"] = $user["phone"];
            $_SESSION["email"] = $user["email"];
            $_SESSION["sin"] = $user["sin"];
            // 注意:不要把密码明文存在SESSION里,有安全风险
            // $_SESSION["password"] = $user["password"];
            header('Location: ViewAllEmployees.php');
            exit;
        } else {
            $error = "邮箱或密码错误";
        }

        $pdo = null;
    } catch (PDOException $e) {
        $error = "操作失败:" . $e->getMessage();
    }
} else {
    $error = "请输入员工登录信息";
}
?>

<html>
<head>
<title>Login</title>
</head>
<body>
<?php
include "Header.php";
include "Menu.php";
?>      
<div class="content">
    <form action="Login.php" method="post">
        Email Address: <input type="text" name="email" /> <br /> 
        Password: <input type="password" name="password" /> <br /> <br /> 
        <input type="submit" value="Login" />
    </form>
    <br /> <br />
    <?php echo $error; ?>
</div>
<?php
include "Footer.php";
?>      
</body>
</html>

额外优化建议

  • 不要明文存储用户密码,建议使用PHP内置的password_hash()加密存储,登录时用password_verify()做校验
  • 不要在SESSION中存储用户密码等敏感信息
  • 全表遍历匹配用户的逻辑性能极差,用户量稍大就会出现接口超时,建议直接用带WHERE条件的SQL语句查询目标用户

内容的提问来源于stack exchange,提问作者asd sad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:15:02