PHP中处理直接URL访问的会话失败

e4yzc0pl  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(121)

我创建了一个会话来限制用户通过URL访问主页,并将他们引导到登录页面(index.php)。但是用户无法使用正确的凭据登录,它仍然会引导回登录页面。似乎会话有问题,因为登录没有会话。
index.php(root folfer)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta name="description" content="The Best Restaurant..">
  7. <title>Signature Cuisine</title>
  8. <link rel="stylesheet" href="style.css">
  9. <link rel="stylesheet" href="mediaquaries.css">
  10. <script src="https://kit.fontawesome.com/5cab703b53.js" crossorigin="anonymous"></script>
  11. <script src="script.js"></script>
  12. </head>
  13. <body>
  14. <div class="page_title_background" id="login_page_background">
  15. <div class="container" id="login_page_form">
  16. <form action="includes/login.inc.php" method="post">
  17. <h2>LOGIN</h2>
  18. <div class="login_form">
  19. <label>User Name</label>
  20. <input type="text" id="fname" name="uid" autocomplete="off">
  21. </div>
  22. <div class="login_form">
  23. <label>Password</label>
  24. <input type="password" id="lname" name="pwd" autocomplete="off">
  25. </div>
  26. <div class="adminpage_submitbtn">
  27. <button name="login" type="submit" id="login_page_submit_btn">Login</button>
  28. </div>
  29. <div class="error-message">
  30. <?php
  31. $errorMessage = '';
  32. if (isset($_GET["error"])) {
  33. if ($_GET["error"] == "emptyinput") {
  34. $errorMessage = 'Fill in all fields!';
  35. } elseif ($_GET["error"] == "wronglogin") {
  36. $errorMessage = 'Invalid details!';
  37. } elseif ($_GET["error"] == "stmtfailed") {
  38. $errorMessage = 'Something went wrong!';
  39. } elseif ($_GET["error"] == "none") {
  40. $errorMessage = 'Account created!';
  41. } elseif ($_GET["error"] == "nouser") {
  42. $errorMessage = 'User not found!';
  43. }
  44. } elseif (isset($_SESSION['error']) && $_SESSION['error'] == 'emptyinput') {
  45. $errorMessage = 'Fill in all fields!';
  46. }
  47. echo '<div class="error">' . $errorMessage . '</div>';
  48. ?>
  49. </div>
  50. </form>
  51. </div>
  52. <p class="reg_link_p">New Here? <a href="signup.php">Register!</a></p>
  53. </div>
  54. </body>
  55. </html>

字符串
home.php(根文件夹)

  1. <?php
  2. session_start();
  3. if (!defined('MY_APP')) {
  4. // If MY_APP is not defined, redirect to another page or display an error message
  5. header("Location: index.php");
  6. exit();
  7. }
  8. // Include necessary files such as header
  9. include_once 'header.php';
  10. ?>
  11. <!---------------------------------------- PAGE 1 ------------------------------>
  12. <!---------------------------------------- TEST ------------------------------------------>
  13. <?php
  14. include_once 'footer.php';
  15. ?>


login.inc.php(root/includes)

  1. <?php
  2. session_start();
  3. require_once 'dbh.inc.php';
  4. require_once 'functions.inc.php';
  5. if (isset($_POST["login"])) {
  6. $username = $_POST["uid"];
  7. $pwd = $_POST["pwd"];
  8. if (emptyInputLogin($username, $pwd)) {
  9. header('Location:../index.php?error=emptyinput');
  10. exit();
  11. }
  12. $loginResult = loginUser($conn, $username, $pwd);
  13. if ($loginResult === "success") {
  14. header('Location: ../home.php');
  15. exit();
  16. } elseif ($loginResult === "nouser") {
  17. header('Location: ../index.php?error=nouser');
  18. exit();
  19. } elseif ($loginResult === "wrongpassword") {
  20. header('Location: ../index.php?error=wronglogin');
  21. exit();
  22. }
  23. } else {
  24. header('Location:../index.php');
  25. exit();
  26. }
  27. ?>


functions.inc.php(root/includes)

  1. <?php
  2. session_start();
  3. require_once 'dbh.inc.php';
  4. function emptyInputSignup($name, $email, $username, $pwd, $pwdRepeat) {
  5. $result;
  6. if (empty($name) || empty($email) || empty($username) || empty($pwd) || empty($pwdRepeat) ) {
  7. $result = true;
  8. } else {
  9. $result = false;
  10. }
  11. return $result;
  12. }
  13. function invalidUid($username) {
  14. $result;
  15. if (!preg_match("/^[a-zA-Z0-9]*$/", $username)) {
  16. $result = true;
  17. } else {
  18. $result = false;
  19. }
  20. return $result;
  21. }
  22. function invalidEmail($email) {
  23. $result;
  24. if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  25. $result = true;
  26. } else {
  27. $result = false;
  28. }
  29. return $result;
  30. }
  31. function pwdMathch($pwd , $pwdRepeat) {
  32. $result;
  33. if ($pwd !== $pwdRepeat) {
  34. $result = true;
  35. } else {
  36. $result = false;
  37. }
  38. return $result;
  39. }
  40. function uidExists($conn, $username) {
  41. $sql = "SELECT * FROM ad_users WHERE usersUid = ? OR usersEmail = ?;";
  42. $stmt = mysqli_stmt_init($conn);
  43. if (!mysqli_stmt_prepare($stmt, $sql)) {
  44. header("Location:../index.php?error=stmtfailed");
  45. exit();
  46. }
  47. mysqli_stmt_bind_param($stmt, "ss", $username, $username);
  48. mysqli_stmt_execute($stmt);
  49. $resultData = mysqli_stmt_get_result($stmt);
  50. if ($row = mysqli_fetch_assoc($resultData)) {
  51. return $row;
  52. } else {
  53. return false;
  54. }
  55. mysqli_stmt_close($stmt);
  56. }
  57. function createUser($conn, $name, $email, $username, $pwd) {
  58. $sql = "INSERT INTO ad_users (usersName, usersEmail, usersUid, usersPwd) VALUES (?,?,?,?);";
  59. $stmt = mysqli_stmt_init($conn);
  60. if (!mysqli_stmt_prepare($stmt, $sql)) {
  61. header("Location:../signup.php?error=stmtfailed");
  62. exit();
  63. }
  64. $hashedPwd = password_hash($pwd, PASSWORD_DEFAULT);
  65. mysqli_stmt_bind_param($stmt, "ssss", $name, $email, $username, $hashedPwd);
  66. mysqli_stmt_execute($stmt);
  67. mysqli_stmt_close($stmt);
  68. header("Location:../index.php?error=none");
  69. exit();
  70. }
  71. function emptyInputLogin($username, $pwd) {
  72. if (empty($username) || empty($pwd)) {
  73. return true; // Return true if input is empty
  74. }
  75. return false; // If not empty, return false
  76. }
  77. function loginUser($conn, $username, $pwd) {
  78. $user = uidExists($conn, $username);
  79. if ($user === false) {
  80. // User doesn't exist
  81. return "nouser";
  82. }
  83. $pwdHashed = $user["usersPwd"];
  84. $checkPwd = password_verify($pwd, $pwdHashed);
  85. if ($checkPwd === false) {
  86. // Incorrect password
  87. return "wrongpassword";
  88. } else {
  89. // Password is correct, set session variables and return success
  90. session_start();
  91. $_SESSION["userid"] = $user["usersId"];
  92. $_SESSION["useruid"] = $user["usersUid"];
  93. $_SESSION["username"] = $user["usersName"];
  94. return "success";
  95. }
  96. }


尝试了不同的方法来调试和找到问题,但失败了。我希望用户只能通过index.php登录到home.php,并限制用户使用URL访问主页。

sxpgvts3

sxpgvts31#

在您的主页上,您需要检查会话是否已设置。

  1. if (isset($_SESSION["userid"])){
  2. header('Location: ../index.php?error=wronglogin');
  3. exit();
  4. }

字符串

相关问题