Сбои с переменной сеанса PHP после отправки формы

Я устанавливаю переменную сеанса PHP с успешным сообщением для HTML-формы, которую я отправляю. Если ошибок формы нет, я перенаправляюсь на одну страницу (используя header ()) и выводит сообщение из переменной сеанса. Все нормально, пока здесь, но если я снова получу эту страницу после отправки, сообщение все еще там. Возможно ли это появиться только после перенаправления после успешной отправки?

Мой код для form.php выглядит так:

if (isset($_POST['submit'])) { // some form processing here if (count($errors) == 0) { // some data saving here $_SESSION['status'] = 'Thank you for submitting the form'; header('Location: /form.php'); } 

И теперь мой файл шаблона:

 {if isset($smarty.session.status)} <p><strong>{$smarty.session.status)</strong></p> {/if} <!-- form html code goes here --> 

Спасибо.

Уничтожьте сеанс:

Измените свой код, чтобы выглядеть примерно так:

 if(isset($_SESSION['sentData']) { echo "Your message"; //This session_destroy(); //or this unset($_SESSION['sentData']); } с if(isset($_SESSION['sentData']) { echo "Your message"; //This session_destroy(); //or this unset($_SESSION['sentData']); } 

РЕДАКТИРОВАТЬ:

Фактически нет, поместите это в конец form.php / ваш файл шаблона / после того, как вы отобразите сообщение:

 unset($_SESSION['status']); 

Перед отображением сообщения вы можете проверить, что сообщение не пустое. Если он не пуст, отобразите сообщение и сразу же явным образом удалите переменную сеанса, чтобы в следующий раз предыдущая проверка не отобразила сообщение.

Надеюсь, я понял ваш вопрос 🙂

Достаточно ли просто очистить переменную сеанса после отображения сообщения?

Это кажется самым простым решением. Вы также можете:

A) Проверьте, какая информация находится в переменной $ _SERVER, чтобы попытаться определить, как пользователь попал на страницу, только отображая сообщение, если это произошло из маршрута.

B) Перенаправление включает переменную querystring (например, '? Messages = 1'), которую вы проверяете, используя $ _GET перед отображением сообщения сеанса.


EDIT: Я думал, что порядок операций:

1) представить форму 2) если нет ошибок, установить сообщение в сеансе 3) перенаправить 4) отобразить сообщение после перенаправления

Я говорю, добавьте шаг 5: удалите сообщение ПОСЛЕ его отображения. Как и в, эхо сообщения, как вы делаете, но затем добавьте код после эха, чтобы удалить или очистить переменную сеанса.


EDIT 2: Ах, я понимаю сейчас …

Мне интересно, если вы должны ссылаться на переменную сеанса непосредственно из файла шаблона. Может быть, лучше передать его в качестве параметра шаблона, который устанавливается PHP, который вызывает шаблон? Это дает вам возможность отделить управление сеансом от отображения, что, вероятно, в ваших интересах.