PHP Login在登录后不会重定向


PHP Login will not redirect after logging in

我讨厌让人困惑,但我不确定在这一点上,如果问题在于PHP登录不工作,或者如果重定向不工作。我将在Login.php和我试图重定向到的目标页面中发布我到目前为止所拥有的内容。

login:

<?php if(isset($_POST["Login"])){ 
if(!empty($_POST['user']) && !empty($_POST['pass'])) {
$user=$_POST['user'];
$pass=$_POST['pass'];
$con=mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('users') or die("cannot select DB");
$query=mysql_query("SELECT * FROM userdata WHERE user='".$user."' AND pass='".$pass."'");
$numrows=mysql_num_rows($query);
if($numrows!=0)
{
while($row=mysql_fetch_assoc($query))
{
$dbusername=$row['user'];
$dbpassword=$row['pass'];
}
if($user == $dbusername && $pass == $dbpassword)
{
session_start();
$_SESSION['sess_user']=$user;
/* Redirect browser */
header("Location: ./Programs/Content/Home.php");
}
} else {
echo "Invalid username or password!";
} } else {
echo "All fields are required!"; }}?> }

然后是一些CSS和基本的HTML内容,但这是表单本身:

<div class="login">
 <form action="" method=POST>
    <center>
    <p><input id="user" name="user" type="text" placeholder="Username"></p>
    <p><input id="pass" name="pass" type="password" placeholder="Password"></p>
    <input type="submit" value="Login">
    </center>
</form> </div>

Home.php的头代码:

<?php 
session_start();
if(!isset($_SESSION["sess_user"])){
header("location:../../Login.php");
} else {
?>

然后是页面内容,最后是:

<?php } ?>

您忘记为提交按钮添加name属性,因此if(isset($_POST["Login"]))将始终为false。

改变
<input type="submit" value="Login">

<input  name="Login" type="submit" value="Login">

您的问题是您的input元素没有与之相关的name。丹雅已经说过了。但是对于这段代码,您应该担心的还有很多。

这不是代码审查,所以我只会指出你有明显的问题/错误。(虽然发布代码审查肯定不会有什么坏处)

首先,找一个合适的IDE来编写你的PHP代码,这将给你自动缩进,这将大大增加可读性,因为你将能够更容易地看到作用域的开始和结束:
<?php
if (isset($_POST["Login"])) {
    if (!empty($_POST['user']) && !empty($_POST['pass'])) {
        $user = $_POST['user'];
        $pass = $_POST['pass'];
        $con = mysql_connect('localhost', 'root', '') or die(mysql_error());
        mysql_select_db('users') or die("cannot select DB");
        $query   = mysql_query("SELECT * FROM userdata WHERE user='" . $user . "' AND pass='" . $pass . "'");
        $numrows = mysql_num_rows($query);
        if ($numrows != 0) {
            while ($row = mysql_fetch_assoc($query)) {
                $dbusername = $row['user'];
                $dbpassword = $row['pass'];
            }
            if ($user == $dbusername && $pass == $dbpassword) {
                session_start();
                $_SESSION['sess_user'] = $user;
                /* Redirect browser */
                header("Location: ./Programs/Content/Home.php");
            }
        } else {
            echo "Invalid username or password!";
        }
    } else {
        echo "All fields are required!";
    }
}
?>

现在的问题:

  • 不要再使用mysql_*,这些函数已经被弃用很长时间了,甚至在PHP 7中被删除了,取而代之的是使用MySQLi或PDO。
  • 不要在查询中盲目插入用户输入的数据。"SELECT * FROM userdata WHERE user='".$user."' AND pass='".$pass."'"。这使你容易受到SQL注入,使用Prepared语句代替。
  • 不要以明文形式保存密码,而是使用类似password_hash的东西并将结果保存在数据库中。然后,当您需要检查用户是否正确输入密码时,只需在$_POST值上再次使用该功能,并将其与数据库中的值进行检查。

  • 您可能也容易受到会话劫持,但这是稍后的问题。