刷新包含post变量的页面


refresh page containing post variables

这是一个简单的用户名/密码登录表单。当我提交正确的数据时,它会转到test.php和echos‘hi’。但如果我在test.php上点击刷新,它会显示"无权限"。在我提交后刷新test.php后,如何让它在test.php上显示"嗨"?

login.php:

<?php
    session_start();
    session_unset();
?>
<html>
    <body>
        <?php include 'header.php'; ?> 
        <form action = "test.php" method = "post">
            <br/>
            Enter username
            <input type = "text" name = "user"/>
            <br/>
            Enter passowrd
            <input type = "password" name = "pass"/>
            </br>
            <input type = "submit" value = "submit" name = "submit"/>
        </form>
    </body>
</html>

test.php:

<?php
    session_cache_limiter('private_no_expire');
    session_start();
    $_SESSION['authuser'] = 0;
    if(isset($_POST['user']) && isset($_POST['pass']))
    {
        $_SESSION['username'] = $_POST['user'];
        $_SESSION['userpass'] = $_POST['pass'];
    }
    else
    {
        $_SESSION['username'] = NULL;
        $_SESSION['userpass'] = NULL;
    }
    if($_SESSION['username']=="joe" && $_SESSION['userpass'] == 123456)
    {
        $_SESSION['authuser']=1;
        echo 'hi';
    }
    else
    {
        echo "No permission";
        exit();
    }
?>

刷新时,浏览器应该为您提供重新发布值的选项,如果您单击"是",它应该可以工作。

或者你可以删除代码的其他部分:

else
{
    $_SESSION['username'] = NULL;
    $_SESSION['userpass'] = NULL;
}

如果删除它,那么会话变量将被记住,代码的其余部分将使用这些会话值。

编辑

在第一次加载该页面时(上面有我建议的更改),如果之前没有登录,您会得到未定义的索引错误。要解决这个问题,您可以更改线路:

if($_SESSION['username']=="joe" && $_SESSION['userpass'] == 123456)

if(isset($_SESSION['username']) && $_SESSION['username']=="joe" && isset($_SESSION['userpass']) && $_SESSION['userpass'] == 123456)

这将检查用户名和用户通行证是否已设置,然后再检查它们的值。