如果$ u和$ 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'],那么会话将不会注册。即使这些信息在数据库中是正确的,因为它在成功时会在index.php上显示名字。
$d = "user01";
,后来它被再次使用(一旦用户名和密码验证)来:
$_SESSION['login_user']=$d;
如果你想
您可以包括其中_The会议不会register_的情况下?还有'var_dump(get_defined_vars());'的输出。请注意不要在输出中暴露敏感信息。 – cychoi
它似乎在检查数据库中的验证用户名和密码。哪一点不清楚? SQL非常简单 - 它使用两个参数 - 用户名和密码,它们使用'$ u'和'$ p'绑定。如果用户被验证,它将使用'$ _SESSION ['login_user'] = $ d;'将它存储为$ d =“user01”;''改变它。 – Fluffeh
备注:是否正确使用md5散列来保护密码?这是非常不安全的! – arkascha