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

PHP司机登录系统:Session存储user_ID失效问题求助

问题分析与解决方案

看起来你遇到的核心问题是**user_ID没有正确存入Session**,我帮你梳理下两处关键错误:

1. 函数参数不匹配 + 获取user_ID的方式错误

你的selectUser函数定义需要4个参数,但调用它的时候只传了3个($conn,$username,$password),这就导致函数里的$userID是未定义的状态,存入Session的自然是空值。而且更关键的是:用户登录时只会提交用户名和密码,你根本无法从前端拿到user_ID,正确的做法是从数据库查询结果里提取user_ID。

修正后的selectUser函数

function selectUser($conn, $username, $password) {
    $query = "SELECT * FROM login WHERE username = :username";
    $stmt = $conn->prepare($query);
    $stmt->bindValue(':username', $username);
    $stmt->execute();
    
    if ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
        // 注意:md5已经不再安全,建议使用password_hash和password_verify
        if (md5($password) == $row->password) {
            $_SESSION['username'] = $username;
            // 从查询结果的$row中取出user_ID存入Session
            $_SESSION['user_ID'] = $row->user_ID;
            echo "Welcome, you are now logged in as " . $username;
            return true;
        }
        return false;
    } else {
        return false;
    }
}

2. 调用函数时的参数修正

你调用selectUser的代码里,要去掉多余的参数,改成:

$successLogin=selectUser($conn,$username,$password);

额外注意事项

  • 确保在所有使用Session的页面最顶部调用session_start(),比如你的profile.php里,session_start()要放在require_once之前,避免Session初始化不及时。
  • 强烈建议不要再用md5存储密码,PHP自带的password_hash()和password_verify()是更安全的方案,后期可以考虑替换。

这样修改后,再用print_r($_SESSION)测试,就能看到user_ID正确存入Session了。

内容的提问来源于stack exchange,提问作者James Green

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:29:56