Очистить переменную сеанса после использования


Можно ли использовать переменную сеанса, а затем отменить ее сразу после этого?

Пример:

//====
//Process Form
if ($_POST['Submit']) {
    $update = $userSettings->update($_POST);

    //If there are form errors
 if (!$update) {
        //Load the errors into an array
        $errors = $update[1];
    } else {
        //Set the session
        $_SESSION['showUpdated'] = true;

        //Redirect to this page
        header("Location: http://www.mysite.com/settings");
    }
}

//==================

if ($_SESSION['showUpdated']) {
 echo "Settings Updated";
    unset($_SESSION['showUpdated'];
}

Итак, после отправки формы, если нет ошибок:

  • Установите сеанс, чтобы сообщить, что отправка формы прошла нормально
  • Перезагрузите страницу (чтобы предотвратить повторную отправку почтовых данных)
  • Если установлена переменная сеанса "Showupdated", отобразите сообщение "Обновлено"
  • Отмените настройку переменной сеанса (поэтому мы не увидим сообщение на следующем перезагрузить)

В настоящее время проблема заключается в том, что если вы сразу же отключите переменную сеанса; Это как если бы вы отключили ее перед частью "если существует".

Какие-нибудь решения? Это вообще лучший способ сделать это?

Большое спасибо!

Author: steveneaston, 2010-07-28

6 answers

Похоже, это должно сработать. Убедитесь, что вы вызываете session_start() перед попыткой использовать сеанс, и всегда выходите() или умирайте() после заголовка перенаправления.

Я делаю то, что вы делаете, немного по-другому. Я сохраняю элемент "сообщение" в сеансе. Я вставлю текст типа "Ваши данные были сохранены", сообщения об ошибках и т. Д. Затем на каждой странице (фактически в классе шаблонов страниц) я проверяю, установлен ли $_SESSION['message'], а не пуст. Если там что-то есть, я показываю сообщение и установите значение в пустую строку или null.

 3
Author: Scott Saunders, 2010-07-27 20:35:42

Я заметил небольшую ошибку в исходном примере, которая может вызвать другие проблемы.

unset($_SESSION['showUpdated'];

Должно быть

unset($_SESSION['showUpdated']);

Не включение этого конца ) в unset приведет к ошибке.

 23
Author: donlaur, 2014-03-11 13:14:57

Я делаю это время от времени. У меня никогда не было с этим никаких проблем. Но то, что я бы добавил к вашему, - это вызов функции exit() после перенаправления заголовка.

ИЗМЕНИТЬ: Причина exit() заключается в том, что это помешает ему обрабатывать любой дальнейший код и исключит возможность отмены установки до того, как вы захотите проверить после перенаправления.

 3
Author: spinon, 2010-07-27 20:33:30

Вызов заголовка без выхода после продолжит запуск страницы.

header("Location: http://www.mysite.com/settings");
exit;

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

 2
Author: Brad F Jacobs, 2010-07-27 20:34:01

Просто проверьте, существует ли он. Это безопасно сделать до того, как он будет определен, и сообщит вам ваш ответ после того, как он будет определен.

if(!empty($_SESSION['showUpdated'])) {
 1
Author: TheJacobTaylor, 2010-07-27 20:44:17

Или вы можете просто установить для него значение false.

if ($_SESSION['showUpdated']) {
 echo "Settings Updated";
 $_SESSION['showUpdated'] = false;
}

И похоже, что вы используете меньшую версию PHP, чем 5.3, потому что в 5.3 вы получите уведомление, когда будете использовать неинициализированное значение. Поэтому вам следует использовать функцию isset:

if (isset($_SESSION['showUpdated']) && $_SESSION['showUpdated']) {
 echo "Settings Updated";
 $_SESSION['showUpdated'] = false;
}
 0
Author: tomasbelusky, 2010-07-27 21:05:27