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

Php 为什么我的会话只从这个唯一的会话变量开始?,php,session,Php,Session,如果$u和$d匹配,会话将注册。但是,如果我将$d字符串更改为其他任何内容,则即使其他内容都已通过,会话也不会注册。我想以存储在users表中的users全名注册会话。有什么我没看见的吗 <?php include('conn.php'); $u = $_POST['user']; $p = md5($_POST['pass']); $sql = "SELECT first_name, last_name, user, pas

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

<?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',],则会话将不会注册。即使该信息在数据库中是正确的,因为它在成功时在index.php上显示第一个名称。

在代码中,$d使用以下定义:

$d = "user01";
稍后,一旦用户名和密码验证为:

$_SESSION['login_user']=$d;
如果要更改保存为用户全名的会话,请将Execute语句更改为查询语句,并从数据库返回该行。然后将包含用户名的列保存到会话中

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

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

您能否提供一个会话不注册的案例?还包括var_dumpget_defined_vars;的输出;。注意不要在输出中暴露敏感信息。它似乎在检查数据库是否有经过验证的用户名和密码。哪一点不清楚?SQL非常简单-它使用两个参数-用户名和密码,这两个参数使用$u和$p绑定。如果用户经过验证,它将使用$\u session['login\u user']=$d存储会话;上面定义为$d=user01;一个旁注:你使用md5散列来保护密码是正确的吗?这是非常不安全的!一个显而易见的问题是:你看过数据库中的数据了吗?我总是问我的客户:你插上了吗?有相当一部分没有。例如,如果用户名是user01,密码是123abc,那么提供的代码就会起作用。但是,如果我将变量$d改为user02,那么它将失败。您能否通过将execute改为查询来澄清您的意思?