我有一个带有下拉菜单的简单页面,我可以在两个值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变量在重新加载页面时被清除。
答案 0 :(得分:0)
我发现了问题...... 这是因为这行代码,我现在评论它它按预期工作。有人可以解释一下我必须设置它吗?
ini_set('session.gc_maxlifetime', 1);
修改强>: 原因是 gc_maxlifetimes 参数单位是以秒为单位,而不是我认为的小时数,因此会话在1秒后过期,因此SESSION变量被清除。感谢hherger指出这一点。