php/mysql登录页未重定向

7d7tgy0s  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(178)

我正在尝试创建一个登录页面,查询数据库以检查用户名和密码是否有效,并允许使用会话访问以下页面。目前,我只是使用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”。它们都显示“no user”,所以我认为我没有正确地搜索数据库。我对php有点陌生,我使用了以下代码。

更新

多亏了注解,修复了密码,所以它们被散列了。
当它仍然不起作用时:
将数据库中的密码数据类型设置为varchar(60),建议使用varchar(255)
我意识到这是因为我的密码数据类型设置为varchar(40)。因为我使用bycrypt来散列,所以它是一个60个字符的字符串。我将密码设置为推荐的varchar(255),以防将来决定使用password\u default。我没意识到这都是在书中提到的 password_hash() 最初创建数据库和字段时的文档。
补充 session_start() 所有页面引用 $_SESSION[] 回响 var_dump() 显示结果 password_verify() 他回来了 true 但是,当我输入正确的信息时,页面仍然不断地将我重定向到登录。在我重定向到的php中,我有以下代码部分:

<?php
  if($_SESSION['loggedin'] == false) {
    header("Location: login.php");
  } else {
  }
?>

我忘了放 session_start(); 在php页面,所以它不断重定向到登录我。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题