У меня есть простая страница с выпадающим меню, где я могу выбирать между двумя значениями: FOO
и BAR
. Выбранное значение должно быть сохранено в моем сеансе. Переменная $_SESSION['typ']
. Он работал до сих пор, но я заметил, что каждый раз, когда я нажимаю F5 или звоню location.reload()
с javascript, тогда переменная сеанса очищается по неизвестной причине.Переменная сеанса пустой после перезагрузки страницы?
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 очищается от перезагрузки страницы.
Просто убедитесь, что я вас правильно понимаю: вы начинаете с страницы с формой. 2-й шаг: форма вызывает _set \ _typ.php_, которая перенаправляет на _main.php_. Когда вы ** теперь ** нажимаете F5, переменная $ _SESSION не установлена? – hherger
Да, точно. Но я нашел проблему, но не могу объяснить, почему она работает, найдите мой ответ ниже, пожалуйста. – Black
Причина в том, что ** gc_maxlifetime ** определяет время в ** секундах **, пока данные сеанса (переменные сеанса) не будут считаться мусором. Может быть, вы просто там, где слишком медленно нажимаете ;-) – hherger