重新加载页面后会话变量为空

Session variable empty after reloading page?

本文关键字:会话 变量 新加载 加载      更新时间:2023-09-26

我有一个简单的页面,上面有一个下拉菜单,我可以在两个值之间进行选择,FOOBAR。所选值应存储在我的会话变量$_SESSION['typ']中。到目前为止它有效,但我注意到每次我按 F5 或使用 javascript 调用location.reload()时,会话变量都会因某种未知原因而被清除。

主.php

<?php
ini_set('session.gc_maxlifetime', 1);
session_set_cookie_params(0.1);
session_start();
if (!isset($_SESSION['typ']))
{
    $typ = "FOO";    //load default value
    $_SESSION['typ'] = $typ;
    //---Debug Output----
    $tmpvar = $_SESSION['typ'];
    echo "<p>Session variable is not set</p>";
    echo "<p>Session variable value: '$tmpvar'</p>";
}
else
{   
    //---Debug Output----
    $tmpvar = $_SESSION['typ'];
    echo "<p>Session variable is set, value = '$tmpvar' </p>";
    $typ = $_SESSION['typ'];  //initialise variable $typ with session variable
}
?>

下拉菜单,我可以在其中设置我的$typ变量。

    <form name="typ_overwrite" method="POST" action="set_typ.php" enctype="multipart/form-data">
        TYP: <select name="typ" id="typ" onchange="document.typ_overwrite.submit()">
<?php
        if($typ == "FOO")
        {
            echo '<option value="FOO">FOO</option>';
            echo '<option value="BAR" selected>BAR</option>';
        }
        elseif($typ == "BAR")
        {
            echo '<option value="BAR">BAR</option>';
            echo '<option value="FOO" selected>FOO</option>';
        }
        else
        {
            echo '<option value="ERROR">ERROR</option>';
        }
?>
        </select>
    </form>

set_typ.php

<?php
    session_start();
    $typ = $_POST['typ'];
    $_SESSION['typ'] = $typ;
    header("location:main.php");
    exit();
?>

如果我第一次加载页面,则输出:

Session variable is not set
Session variable value: 'FOO'

从下拉菜单中选择 BAR 后的输出:

Session variable is set, value: 'BAR'

按 F5 或调用location.reload()后输出

Session variable is not set
Session variable value: 'FOO'

我希望有人能启发我为什么我的会话变量在重新加载页面时被清除。

我发现了问题...正是因为这行代码,我把它注释掉了,现在它按预期工作。有人可以解释我必须在哪里设置它吗?

ini_set('session.gc_maxlifetime', 1);

编辑:原因是gc_maxlifetimes参数单位以秒为单位,而不是我想象的以小时为单位,因此会话在 1 秒后过期,因此清除了 SESSION 变量。感谢赫格指出这一点。