php登录验证


php login verification

我现在已经无计可施了。以下是我想知道的,我如何检查用户在我的登录页面上提供的信息(仅包括用户名和登录名)与我数据库中的信息?我已经可以做到这一点,但现在我的问题是我已经确定的两件事。1) 如果提供的信息与存储在我的数据库中的信息相比是真实的,那么我想将用户引导到另一个页面(我认为HTML中的ACTION方法会处理这一问题)。但如果输入错误,那么我希望对登录页面进行迭代,这样他们就可以重新输入自己的详细信息。

if ($p===$p1)
{
    header("Location:success.php");
}
else
{
    header("Location:fail.php");
}

上面是我的代码,$p是表单密码字段中的值,$p1是数据库中的值。这个代码现在的情况是,即使密码甚至用户名不匹配,用户仍然可以访问成员页面。我已经能够确定问题出在"header"方法上。但即使我把两者互换,用户仍然指向success.php。如果你不理解我问题的症结所在,我恳请你不要忽视它,只要问我,我会提供更多信息。很抱歉,我似乎无法获得

现在这个代码发生的情况是,即使密码和用户名不匹配,用户仍然可以访问成员页面

你需要学习会话的基本知识。

一些链接可以帮助您建立第一个身份验证页面:

PHP登录脚本教程
Php简单登录教程
使用PHP 创建数据库登录页

您使用这个if来检查元素是否是相同的

if ($p===$p1) {

你说$p是你的post变量,$p1是数据库中的数据。。。

我不太确定,因为我看不到你的脚本,但我希望if问题总是正确的,因为你使用了三个=字符"==="和三个等号来检查变量类型。

两个变量都来自"数组"类型(据我所料),所以你的问题看起来总是像这个

if (array === array) {

这总是真的。

您应该指定if问题。

if ($p['password'] == $p['password']) {

或者你想检查的任何东西。

总结:就我在你的短代码中所看到的,我认为问题是三重等号

编辑:

您应该更改您的登录名。最好的方法是通过sql检查用户信息是否正确。

示例:$sql="SELECT id FROM user WHERE name='"$p[姓名]。"'和密码=MD5($p['password'])"

然后执行sql。您还可以使用count(*)来检查登录信息是否正确。如果它不正确,那么应该不会从数据库返回。

您在这里提出的建议不会阻止用户访问"成员"页面,但它应该确定用户在提交密码后被发送到哪个页面。如果不是后者,那么代码中的其他地方就会出现问题。

但正如我所提到的,如果你想阻止未经身份验证的用户访问某些页面,那么最简单的解决方案是在身份验证时在会话中设置一个标志,例如

session_start();
if ($_POST['password']===stored_password($_POST['username'])) {
    $_SESSION['authenticated']=$_POST['username'];
    header("Location:success.php");
    exit; 
} else {
    header("Location:fail.php");
    exit;
}

然后在每个经过验证的页面的顶部:

session_start();
if (!$_SESSION['authenticated']) {
    header("Location:fail.php");
    exit;
}

(注意标头后面的显式退出("位置:…");)

一旦你做到了这一点,你就可以开始考虑在身份验证时重新生成会话id,以防止会话固定/劫持问题,并将用户密码存储为哈希,以防止泄露问题。

试试这个:

var_dump($p);
var_dump($p1);

它不会解决你的问题,但它会向你展示变量中存储的内容以及它们是什么类型的变量。

你期望什么样的价值观?