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
相关产品推荐
相关产品推荐

