【发布时间】:2016-05-12 16:18:28
【问题描述】:
我有一个带有下拉菜单的简单页面,我可以在其中选择两个值,FOO 和 BAR。所选值应存储在我的会话变量$_SESSION['typ'] 中。到目前为止它一直有效,但我注意到每次当我按 F5 或使用 javascript 调用 location.reload() 时,会话变量都会由于某种未知原因被清除。
main.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'
我希望有人能告诉我为什么我的 Session 变量在重新加载页面时被清除。
【问题讨论】:
-
只是为了确保我理解您的正确:您从带有表单的页面开始。第二步:表单调用set_typ.php,它重定向到main.php。当您现在按 F5 时,$_SESSION 变量没有设置?
-
是的,完全正确。但是我发现了问题,但无法真正解释它为什么起作用,请在下面找到我的答案。
-
原因是 gc_maxlifetime 定义了以 秒 为单位的时间,直到会话数据(会话变量)被视为垃圾。也许你只是点击太慢了;-)
-
啊,我明白了,如果我将其设置为 1000,它会起作用,看来我找到有关会话信息的来源已过时或不正确。谢谢你:)
标签: javascript php html session variables