PHP - 错误的用户名/密码 - 如何正确回应它[重复]

Posted

技术标签:

【中文标题】PHP - 错误的用户名/密码 - 如何正确回应它[重复]【英文标题】:PHP - Wrong Username / Password - How to Echo it Properly [duplicate] 【发布时间】:2015-05-15 11:17:29 【问题描述】:

我正在尝试用 php 编写登录表单。登录/注销工作正常,但是我有点好奇为我的特定代码回显“错误的用户名/密码”的正确方法。

这是我的代码(来自 login.php,它包含在侧边栏中的 index.php 中):

<form method="post" action="security.php">
<input name="username" type="text" placeholder="Username" id="username"><br />
<input name="password" type="password" placeholder="Password" id="password"><br />
<input name="login" type="submit" value="Log in" class="login">
<small><input type="checkbox"> Keep me logged in</small>
</form>
<?php
if ($failed == 1) 
echo "Wrong Username / Password";

?>

这是我的 security.php 代码:

<?php
require 'connect.php';

// username and password sent from form 
$tbl_name = 'users';
$username=$_POST['username']; 
$password=$_POST['password'];

// To protect mysql injection
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result = mysqli_query($conn, $sql);

// Mysql_num_row is counting table row
$count = mysqli_num_rows($result);

// If result matched $username and $password, table row must be 1 row
if($count == 1)

// Register $username, $password and redirect to file "login_success.php"
session_start();
$_SESSION["username"] = $username;
header("location:home.php");

else 
$failed = 1;
header("location:index.php");

?>

正如您可能看到的或可能没有看到的,我尝试使用在 security.php 中设置的名为 $failed 的变量,该变量在 security.php 中设置并在 login.php 中的 if 中使用来回显失败消息。我知道这甚至离工作还很远,但这是我能看到的告诉你我正在尝试做什么的唯一方法。有什么帮助吗?

【问题讨论】:

为什么不检查$_SESSION['username'] 是否已设置(使用isset())?如果没有,您就知道安全检查失败了。 【参考方案1】:

您应该将 LIMIT 1 添加到您的 sql 查询中。

否则,请执行header("location:index.php?success=false");

然后你可以检查它:

if( !empty( $_GET[ 'success' ] ) && ( $_GET[ 'success' ] == FALSE ) )

echo 'failed login';

【讨论】:

【参考方案2】:

试试这个security.php

if($count == 1)

// Register $username, $password and redirect to file "login_success.php"
session_start();
$_SESSION["username"] = $username;
header("location:home.php");

else 
header("location:index.php?msg=failed");

这在 index.php:

if (isset($_GET["msg"]) && $_GET["msg"] == 'failed') 
echo "Wrong Username / Password";

【讨论】:

【参考方案3】:

在您的安全代码中,您可以在登录失败部分进行更改:

$failed = 1;
header("location:index.php");

到:

$failed = 1;
include "./login.php";

这样,当身份验证失败时,用户将返回登录屏幕,中间不会出现 301 重定向。如果所有 php 文件都在同一个文件夹中,这将很有效。

【讨论】:

以上是关于PHP - 错误的用户名/密码 - 如何正确回应它[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中取消设置全局变量?

密码或用户名错误时如何显示错误消息?

登录表单:无论它显示“用户名/密码组合不正确”的消息[关闭]

如何正确地为密码做一个while循环

Ajax 调用中的 PHP 重定向

PHP登录访问在Web服务器中不起作用