PHP / MySQL登录页​​面未重定向

时间:2018-08-30 18:10:34

标签: php mysql redirect

我正在尝试创建一个登录页面,该页面查询数据库以检查用户名和密码是否有效,并允许使用会话访问以下页面。目前,我只是使用XAMPP来测试登录。这是我在PHP页面中的以下代码。

<?php
  include("config.php");
  session_start();

  // Check for POST method
  if($_SERVER['REQUEST_METHOD'] == 'POST') {

    $username = stripslashes($_POST['username']);
    $username = mysqli_real_escape_string($con, $username);
    $password = stripslashes($_POST['password']);
    $password = mysqli_real_escape_string($con, $password);

    //Search database for username and password
    $stmt = $con->prepare("SELECT * FROM users
    WHERE username = ? LIMIT 1"); // Prepared statement
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $result = $stmt->get_result();
    $user = $result->fetch_object();
    if(password_verify($_POST['password'], $user->password)) {
      echo("working");
      $_SESSION['loggedin'] = true;
      $_SESSION['user'] = $user->username;
      header("Location: index.php");
    } else {
      echo("no user");
    }
  }
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Login</title>
</head>
<body>
  <form id="loginForm" method="post" action="">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" name="submit" value="Login">
  </form>
</body>
</html>

我添加了一个echo语句,只是为了查看它是否会为数据库中而不是数据库中的两个用户/密码集输出“ no user”。它们都显示“无用户”,所以我认为我没有正确搜索数据库。我对PHP有点陌生,并且使用了this code

更新

感谢评论,修复了密码,以便对它们进行哈希处理。

当它仍然不起作用时:

将数据库中的密码数据类型设置为VARCHAR(60),建议使用VARCHAR(255)

我意识到这是因为我将密码数据类型设置为VARCHAR(40)。由于我使用bycrypt进行哈希处理,因此它是60个字符串。我将密码设置为建议的VARCHAR(255),以防将来决定使用PASSWORD_DEFAULT。最初创建数据库和字段时,我没有意识到password_hash() documentation中提到的所有内容。

已将session_start()添加到引用$_SESSION[]的所有页面

当我输入正确的信息时,回显var_dump()以显示返回password_verify()的{​​{1}}的结果,但是,页面stil一直将我重定向到登录名。在PHP中,我重定向到了这段代码:

true

我忘记将<?php if($_SESSION['loggedin'] == false) { header("Location: login.php"); } else { } ?> 放在PHP页面中,因此它一直将我重定向到登录名。

0 个答案:

没有答案