使用会话控制返回一个回显


Returning an echo using session control

我在PHP会话工作。用户输入他的姓名和密码,然后将其发布到一个php页面,如果凭据存在于数据库表中,则该页面启动会话,然后允许用户查看某些页面(如果有效),或者返回登录(如果无效)。数据库和会话的一切工作,除了当用户没有登录时,它应该回显"您没有登录"。然后返回登录页面。它返回到登录页面只是很好,但我没有看到消息的任何地方。谁能告诉我,如果代码的顺序是不正确的,或另一种方法来显示错误,而没有一个页面只是显示错误?

    <?php
session_start();
echo '<h1>Employees Only</h1>';
if (isset($_SESSION['valid_user']))
{
    if ($_SESSION['valid_user'])
    {
        echo "<p>You are currently logged in as " . $_SESSION['valid_user'] . "</p>";
        $form  = "<form action='"logout.php'" method='"post'">";
        $form .= "<input type='"submit'" name='"logout'" value='"Log Out'">";
        $form .= "</form>";
        echo $form;
    }
    else
    {
        echo "<p>You are not logged in.</p>";
        header("Location:login1.html");
        exit();
    }
}
else
{
    echo "<p>You are not logged in.</p>";
    header("Location:login1.html");
    exit();
}
    ?>

回显"You are not logged in"。不显示,但返回到login1.html

使用此选项,它将等待5秒,之后它将重定向到login1.html

header( 'refresh: 5; url=login1.html' );
echo '<h1>You will be re-directed in 5 seconds...</h1>';

我认为这是因为你在使用header('location:login1.html')。它立即重定向客户端。
尝试使用header( 'Refresh:2; url=login1.html' );。它将等待x(在本例中为2),然后重定向。你可以在这里读到更多。

您不能在重定向用户的同时期望他有时间查看您正在发送的消息。您需要退一步,划分流程,将其保存到一个变量中,并在下一页上显示给用户。

有很多方法可以做到这一点,最流行的是,大多数web框架使用的是制作一个"flash消息",它将只存在于会话中,直到下一个页面重新加载,因此只显示一次给用户。

本文向您展示了如何做到这一点。如果你想使用现有的东西,谷歌上还有很多。