2014-10-10 5 views
0

У меня есть этот код мира, который я не понимаю, почему он не работает, как я ожидаю.unset variable done before unset

<?php 
session_start(); 

if($_SERVER['REQUEST_METHOD'] == "POST") { 
    $_SESSION['reg'] = "done"; 
    header("Location: " . SELF, true, 302); 
} 

if((isset($_SESSION['reg']) AND ($_SESSION['reg'] == "done"))) { 
    unset($_SESSION['reg']); 
    echo "Done"; 
}else{ 
    echo "Not done"; 
} 
?> 

После POST перенаправляет и Эхо Not done, но я бы ожидать, что она будет Эхо Done. Если я удалю строку с unset, она отлично работает, а echo - Done.

Это не то поведение, которого я ожидал бы. Какую ошибку я делаю?

+0

Является 'session_start();' действительно загружен? –

+0

@ Fred-ii-, да. Не показывать это в коде – Timo002

+1

Попробуйте ответ Стива. Довольно уверен, что это исправить. –

ответ

2

Переадресация заголовка не останавливает выполнение скрипта, поэтому немедленное выполнение выполняется.

Чтобы исправить exit после редиректа

<?php 
session_start(); 

if($_SERVER['REQUEST_METHOD'] == "POST") { 
    $_SESSION['reg'] = "done"; 
    header("Location: " . SELF, true, 302); 
    exit();//<-- add this 
} 

if((isset($_SESSION['reg']) AND ($_SESSION['reg'] == "done"))) { 
    unset($_SESSION['reg'); 
    echo "Done"; 
}else{ 
    echo "Not done"; 
} 

?> 
+0

aaargggg, теперь я также понимаю, почему это отлично работает на других страницах, где я действительно положил «exit». Просто забыли об этой странице! Большое спасибо! Кстати, просто использовать 'exit' достаточно? Или лучше сделать 'exit()'. – Timo002

+0

* "' exit(); // <- add this' "* - На самом деле, используя только' exit; 'вместо' exit(); ', по-видимому, лучше. Был аналогичный вопрос примерно в тот же день, когда ответ человека упоминал что-то о влиянии «exit()» на скобки, должен работать немного сложнее. Просто сидение. –

+0

'выход; Выход(); умереть; die(); 'все функции одинаковы, хотя, возможно, крошечные накладные расходы на использование нотации функций (скобки). Я использую скобки, потому что иногда мне нужно отправить сообщение об ошибке. Когда я этого не делаю, я чувствую, что все еще лучше быть последовательным, но это вопрос мнения. В любом случае, рад, что я мог бы вам помочь – Steve

0

записи этого unset($_SESSION['reg']); вместо этого unset($_SESSION['reg');

+0

* «напишите это' unset ($ _ SESSION ['reg']); вместо этого 'unset ($ _ SESSION ['reg');' "* - Errr ..... * huh? * –

+0

закрывающая квадратная скобка пропал, отсутствует. – deadman

+0

LOL! извините, я не видел эту отсутствующую скобку. Виноват. –