2016-02-03 3 views
0

У меня есть простая страница с выпадающим меню, где я могу выбирать между двумя значениями: 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 очищается от перезагрузки страницы.

+1

Просто убедитесь, что я вас правильно понимаю: вы начинаете с страницы с формой. 2-й шаг: форма вызывает _set \ _typ.php_, которая перенаправляет на _main.php_. Когда вы ** теперь ** нажимаете F5, переменная $ _SESSION не установлена? – hherger

+0

Да, точно. Но я нашел проблему, но не могу объяснить, почему она работает, найдите мой ответ ниже, пожалуйста. – Black

+1

Причина в том, что ** gc_maxlifetime ** определяет время в ** секундах **, пока данные сеанса (переменные сеанса) не будут считаться мусором. Может быть, вы просто там, где слишком медленно нажимаете ;-) – hherger

ответ

0

Я нашел проблему ... Именно потому, что эти строки кода, я прокомментировал это сейчас, он работает так, как ожидалось. Может кто-нибудь объяснить, где я должен его установить?

ini_set('session.gc_maxlifetime', 1); 

РЕДАКТИРОВАТЬ: Причина в том, что gc_maxlifetimes единица параметра в секундах, а не в часах, как я думал, так что сеанс истек через 1 секунду, и для этого переменные сессии были очищены. Престижность, чтобы указать на это.

+1

0.1 означает 0,1 секунды как время жизни печенья. Я бы предложил установить его на 0 (null), что означает «пока клиентский браузер не будет закрыт». – hherger

+0

Ой, я скопировал неправильную строку кода, я отредактировал свой ответ. Но вы были правы, потому что я устанавливал gc_maxlifetime на 1, после того как я установил его на 1000, он работает так, как ожидалось. – Black

Смежные вопросы