【问题标题】:PHP Session not setting unless I refresh除非我刷新,否则 PHP 会话不会设置
【发布时间】:2015-11-26 18:05:20
【问题描述】:

我已经创建了一个工作会话(我可能会在此处添加帮助),并且我已经设法让它跨多个文件存储一个变量而没有任何问题。

当 $username 未填写时,会提示用户提交其用户名,并在提交时为 $username 分配用户名的值,并且表单将替换为文本,不再提示用户输入理论上的用户名。

这是我现在拥有的代码:

<?php
session_start();

?>

<header>
    <!DOCTYPE html>
    <link rel="stylesheet" type="text/css" href="style/main.css">
    <title>webshop</title>

</header>

<div id="LogIn">
    <?php
    if(isset($_SESSION['username'])){
    echo 'Current session username: '.$_SESSION['username'];
    echo '<br /><a href="logout.php">Destroy current session</a>';
} else {
        ?>
        <form class="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="form1">
            <fieldset>
                <ul>
                    <p>Please enter your username to continue to the webshop.</p>
                    <label for="name">User Name:</label><span><input type="text" name="username" placeholder="User Name"
                                                                     class="required" role="input"
                                                                     aria-required="true"/></span>

                    <input class="submit transparentButton" value="Next" type="submit" name="Submit"/>
                </ul>
                <br/>
            </fieldset>
        </form>
        <?php

        if (isset($_POST['Submit'])) {
            $_SESSION['username'] = $_POST['username'];
        }

    }
    ?>
</div>


<a href="cart.php">cart</a><br />
<a href="index.php">index</a>

我遇到的问题是,一旦用户在表单中输入了他们的用户名并单击“下一步”,页面就会重新加载并且表单仍然存在。如果您随后刷新该页面,它将用文本替换表单,并将会话变量 $username 解析为带有注销链接的纯文本 (session_destroy())。

我的问题是为什么我必须刷新页面才能正确显示会话变量?和if语句有关系吗?

提前致谢。

【问题讨论】:

    标签: php session


    【解决方案1】:

    你只是有一个逻辑/排序问题。

    移动当前位于表单下方的这段代码:

        if (isset($_POST['Submit'])) {
            $_SESSION['username'] = $_POST['username'];
        }
    

    到您的文件顶部,就在session_start() 下方,它会按照您的意愿行事。

    现在编写代码的方式是在表单显示之后才设置会话变量。您希望在表单显示之前设置会话变量(如果实际上设置了 $_POST 用户名)。

    【讨论】:

    • 哇,这很容易,非常感谢!我会在几分钟内标记为已解决,非常感谢!
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2021-05-14
    • 2012-07-31
    • 2014-09-17
    • 2017-01-10
    • 1970-01-01
    • 2012-11-12
    • 2017-02-16
    相关资源
    最近更新 更多