PHP$_SESSION未检查登录状态


PHP $_SESSION Not checking login status

我已经查看了多篇web文章和stackoverflow的答案,但我在代码中找不到错误。也许我看得太久了。

基本上,我只是为演示设置一个简单的登录,是的,我知道它是可注入的,而且已经过时了,这无关紧要。基本上,我使用会话登录,然后在用户登录时将其重定向到安全内容。我还创建了一个脚本,用于检查会话变量,以查看用户是否登录。基本上,我是在打一匹死马,我不知道为什么这不起作用,有人能帮忙吗?

index.php:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome, please log in</title>
<link href="../css/admin.css" rel="stylesheet" type="text/css">
</head>
<body>
    <?PHP require_once"scripts/mysql_connect.php"; // Establish a database connection ?>
    <div id="admin_top">
        <div id="admin_logo"></div>
    </div>
    <div id="admin_login_box">
        <H1 style="margin-left: 20px;">Please log in</H1>
        <hr><br>
        <?PHP
        echo "<form method='post' action='checklogin.php' name='loginform'>
        <input type='email' name='aEmail' placeholder='Your Email Address' required><br>
        <input type='password' name='aPassword' placeholder='Password' required><br><br>
        <input type='submit' value='Log In'>
    </form>"
    ?>
    </div>
</body>
</html>

checklogin.php:

<!doctype html>
<html>
<head>
<title>Checking login...</title>
<link href="../css/admin.css" rel="stylesheet" type="text/css">
</head>
<body>
    <div id="admin_top">
        <div id="admin_logo"></div>
    </div>
    <div id="admin_login_box">
        <?php 
              require_once"scripts/mysql_connect.php"; 
                $aEmail = $_POST['aEmail'];
                $aPassword = $_POST['aPassword']; 
                $md5Password = MD5($aPassword);
                $sql = "SQL";
                $result = mysql_query($sql);
                $row = mysql_fetch_array($result);
                $active = $row['active'];
                $count = mysql_num_rows($result);
                // If result matched, table row must be 1 row.
                if($count == 1) {
                     $_SESSION["login"] = "OK";
                     $_SESSION["aEmail"] = $aEmail;
                     echo "<h1>Log in successfull!</h1>
                            <hr><br />
                            Your details checked out! Redirecting you now...";
                     // Wait 1 seconds then redirect to the secure content.
                     header("Location: http://www.website.com/secure_content.php");                  
                } else {
                    echo "<h1>Log in unsuccessfull!</h1>
                            <hr><br />
                            Sorry. It seems your log in detials were incorrect. Please go back and try again.";
                    // Wait 2 seconds then redirect back to the log in page.
                    header("Location: http://www.website.com/index.php");
                }
                exit;
        ?>
    </div>
</body>
</html>

loginstus.hp:

<?php session_start();
    if(!(isset($_SESSION["login"]) && $_SESSION["login"] == "OK")) {
        header("Location: http://www.website.com/index.php");
        exit;
    }
?>

谢谢你的帮助!

checklogin.phpindex.php中,您需要启动会话。在<!doctype html> 之前添加以下代码

添加此代码:

<?php session_start(); ?>

您忘记将该行放在此文件中,因为您在数据库中进行检查时正在创建一个新会话。

看起来您一开始就没有开始会话。请在页面顶部写下以下代码:

<?php session_start(); ?>

其次,我建议您分别编写HTML和PHP,而不是为echo中的表单编写HTML。

此外,最好在提交按钮中添加一个名称。

让我在下面展示一个样品。

<div id="admin_login_box">
    <H1 style="margin-left: 20px;">Please log in</H1>
    <hr><br>
    <form method='POST' action='checklogin.php' name='loginform'>
        <input type='email' name='aEmail' placeholder='Your Email Address' required><br>
        <input type='password' name='aPassword' placeholder='Password' required><br><br>
        <input type='submit' name='submit' value='Log In'>
    </form>

现在,您应该在checklogin.php中放置一个isset条件,看看是否收到任何POST请求。

试试这个:

<?php 
   require_once"scripts/mysql_connect.php"; 
   if (isset($_POST['submit']) {           // Add this condition
       $aEmail = $_POST['aEmail'];
       $aPassword = $_POST['aPassword']; 
       $md5Password = MD5($aPassword);
       /* Other code */
       if($count == 1) {
          /* Other code */
       } else {
         /* Other code */
       }
   }

希望这能有所帮助。