2015-08-21 4 views
1

Я пишу код для математических задач - они следуют за форматом со случайными сгенерированными переменными, а затем я блокирую переменные в соответствии с приведенным ниже кодом. Что не работает - form03 позволяет пользователю завершить страницу математических задач и выполнить сброс для другого. Мне нужно уничтожить сеанс в этом состоянии. Но даже когда я ввожу данные в form03, так что он isset, старые значения сеанса остаются. ???PHP условный session_destroy не работает как ожидалось

require_once 'random.php'; 
require_once 'forms-functions.php'; 

if (isset($_SESSION['z'])) { 
    $_SESSION['y'] = ""; 
    session_start(); 
    session_destroy(); 
} 

session_start(); 

if (isset($_SESSION['y'])) { 
    echo "hello isset<br>"; 
    $x01 = $_SESSION['x01']; 
    $x02 = $_SESSION['x02']; 
    $output01b = $_SESSION['output01b']; 
    $output02b = $_SESSION['output02b']; 

} else { 
    echo "hello else<br>"; 

    ob_start(); 
    random1(); 
    $output01 = ob_get_clean(); 
    $output01b = "single string: ".$output01.""; 
    $x01 = $x; 

    ob_start(); 
    random1(); 
    $output02 = ob_get_clean(); 
    $output02b = "single string: ".$output02.""; 
    $x02 = $x; 

    $_SESSION['x01'] = $x01; 
    $_SESSION['x02'] = $x02; 
    $_SESSION['output01b'] = $output01b; 
    $_SESSION['output02b'] = $output02b; 

    $y = "1"; 
    $_SESSION['y'] = $y;  
} 

echo $output01b; 
$user_input01 = form01('user_input01'); 

echo $output02b; 
$user_input02 = form02('user_input02'); 

$user_input03 = form03('user_input03'); 

if(isset($user_input03)) { 
    $z = 1; 
    $_SESSION['z'] = $z; 
    echo "hello \$z"; 
} 

ответ

1

Вам нужно позвонить session_start(), прежде чем пытаться получить доступ к переменной z сеанса. И вам нужно установить новую переменную сеанса y после того, как вы уничтожите старый сеанс и запустите новый.

session_start(); 
if (isset($_SESSION['z'])) { 
    session_destroy(); 
    session_start(); 
    $_SESSION['y'] = ""; 
} 
+0

спасибо. Это не сработало. После нескольких входов я столкнулся со странным сценарием, увидев эхо «hello isset», но получив Undefined Index Notices для всех четырех терминов в if-сравнению isset ($ _ SESSION ['y']). – ptme

+0

Ваш код предполагает, что когда 'y' установлен, то есть' x01' и 'x02'. Но 'y' устанавливается при уничтожении сеанса, поэтому никакие другие переменные сеанса не будут установлены. Я не уверен, что вы пытаетесь сделать с «y», когда вы установите его, прежде чем уничтожить сеанс. – Barmar

+0

Спасибо, я думаю, мне нужно было не только переместить этот сброс SESSION ['y'] после уничтожения, но и просто избавиться от этого сброса SESSION ['y'] вообще (а остальная часть этого первого IF сравнение теперь стоит в том порядке, который вы предложили) .... Тем не менее, я все еще не могу перезагрузить сессию, когда я ввожу значение для $ user_input03. I * do * получить эхо «hello \ $ z», но значения сеанса по-прежнему установлены (если я вручную не уничтожу сеанс безоговорочно). – ptme

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