为什么我的会话只从这个唯一的会话变量开始


Why does my session only start with this unique session variable?

如果$you和$d匹配,会话将注册。 但是,如果我将$d字符串更改为其他任何内容,即使其他所有内容都通过,会话也不会注册。 我想以存储在表用户中的用户全名注册会话。 有什么我没有看到的吗?

<?php
        include('conn.php');
        $u = $_POST['user'];
        $p = md5($_POST['pass']);
        $sql = "SELECT first_name, last_name, user, pass FROM users WHERE user = :user AND pass = :pass";
            $q = $conn->prepare($sql);
            $q->bindParam(":user", $u);
            $q->bindParam(":pass", $p);
            $q->execute();
            $login = $q->fetch();
            $d = $login['user'];
            if($login['user']){
                session_start();
                $_SESSION['login_user']=$d;
                header('Location: index.php');
            }
            else{
                header('Location: login.php');
            }
?>
编辑

:我已经编辑以显示我的意思的更好示例。 如果我将变量$d更改为 $login['first_name'],则会话将不会注册。 即使该信息在数据库中是正确的,因为它在索引上显示名字.php当它成功时。

在代码中,$d是使用以下方法定义的:

$d = "user01";

稍后再次使用它(一旦用户名和密码被验证)来:

$_SESSION['login_user']=$d;

如果要更改保存为用户全名的会话,请将 execcute 语句更改为 query 语句,并从数据库中返回该行。然后将具有用户名的列保存到会话中。

假设您将执行更改为查询 - 您可以使用如下内容:

$_SESSION['login_user']=$result['username'];