Php 为什么我的会话只从这个唯一的会话变量开始?
如果$u和$d匹配,会话将注册。但是,如果我将$d字符串更改为其他任何内容,则即使其他内容都已通过,会话也不会注册。我想以存储在users表中的users全名注册会话。有什么我没看见的吗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
<?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改为查询来澄清您的意思?