Php 页面未重定向到具有正确用户名和密码的索引

Php 页面未重定向到具有正确用户名和密码的索引,php,mysql,session,redirect,Php,Mysql,Session,Redirect,我有很多用户可以使用网站的一个安全部分,现在我正致力于使其能够登录和注销。我无法将此页面重定向到原始页面。当我第一次转到index.php时,它确实像应该的那样重定向到Login.php。但当我在页面中输入正确的用户名和密码并提交时,它只会重定向回login.php。但它并没有像重定向回login.php时那样将$_SESSION[“correct”]的参数设置为false,而是将其设置为TRUE$_在输入正确的用户名或密码之前,甚至不应设置会话[“correct”]。这些都是在我的verify

我有很多用户可以使用网站的一个安全部分,现在我正致力于使其能够登录和注销。我无法将此页面重定向到原始页面。当我第一次转到index.php时,它确实像应该的那样重定向到Login.php。但当我在页面中输入正确的用户名和密码并提交时,它只会重定向回login.php。但它并没有像重定向回login.php时那样将$_SESSION[“correct”]的参数设置为false,而是将其设置为TRUE$_在输入正确的用户名或密码之前,甚至不应设置会话[“correct”]。这些都是在我的verify.php中完成的。我正在回显“已记录”和“正确”会话数据的值,以验证它们是否已设置以及它们的值是什么

LOGIN.PHP

<div class="panel panel-default">
    <div class="panel-heading">
        <h3>Administration Login</h3>
    </div>
    <form action="verify.php" method="post">
        <div class="panel-body">
            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                <?php
                    echo $_SESSION['logged'] . '<br>';
                    echo $_SESSION['correct'] . '<br>';
                ?>
                <input class="form-control" type="text" placeholder="Username" name="username" id="username" required autofocus>
            </div>
            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                <input class="form-control" type="password" placeholder="Password" name="password" id="password" required>
            </div>
            <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">
                <button type="submit" class="btn btn-success btn-block">Login</button>
            </div>
            <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">
                <button type="reset" class="btn btn-danger btn-block">Clear</button>
            </div>
        </div>
    </form>
</div>

管理登录
登录
清楚的
VERIFY.PHP

<?php
    session_start();
    require ("../_php/connectInfo.php");

    $username = mysqli_real_escape_string($conn, $_POST['username']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);
    $query = "SELECT id, username, password FROM info";
    $result = $conn->query($query);
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            if ($row['password'] == $password && $row['username'] == $username) {

                $_SESSION["logged"] = TRUE;
                $_SESSION["correct"] = TRUE;
                header("location: index.php");
                exit;
            }
        }
        $_SESSION["correct"] = FALSE;
        header("location: login.php");  
    } else {
        header("location: login.php");  
    }
?>

您必须使用
die()
退出而不是
中断

(...)
while ($row = $result->fetch_assoc()) {
    if ($row['password'] == $password) {

        $_SESSION["logged"] = TRUE;
        $_SESSION["correct"] = TRUE;
        header("location: index.php");
        break;                            #  -----
    }                                     #      |
}                                         #      |
$_SESSION["CORRECT"] = FALSE;             #  <----
header("location: login.php");  
(...)
(…)
而($row=$result->fetch_assoc()){
如果($row['password']==$password){
$\u会话[“已记录”]=TRUE;
$\u会话[“正确”]=TRUE;
标题(“location:index.php”);
中断;#-----
}                                     #      |
}                                         #      |

$\u会话[“正确”]=FALSE;#请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,您可以使用
密码\u hash()
。是否在每个页面的顶部都有
会话\u start()
需要使用会话变量?我相信是的,login.PHP确实有,我只是没有列出它,因为在我把课程放在哪里之后会有一些机密信息。一旦我能掌握基本功能,我会集中精力解决安全问题。我讨厌人们说“我没走那么远…”或“这个网站不会公开…”或“它只供学校使用,所以安全无所谓…”。如果老师和教授从一开始就不谈论安全问题,那他们就是做错了。他们正在教授草率而危险的编码实践,学生们以后将不得不放弃这些实践。我也讨厌人们说,“我以后再加安全措施……”。如果你第一次没有时间做正确的事情,你什么时候能抽出时间来添加呢?¯\_(ツ)_/''我这样做了,现在它只停留在verify.phpI上,它已经复制了您的代码,并为我工作(使用
die
)。我不明白你的问题是什么。这真的是个奇怪的问题。你有办法检查错误日志吗?也许可以帮上忙。我启用了所有错误报告,并出现以下错误:
警告:无法修改标题信息-标题已由发送(输出从/home/prouda/public_html/cms/verify.php:1开始)在第17行的/home/prouda/public_html/cms/verify.php中,您省略了此处发布的代码中的某些行?因为这是上面代码的第15行。在
之前有一些内容不,在此之前不存在任何代码,但这可能是因为此文件是
login.php
上发布的操作?