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

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

Пример:

//====
//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'];
}

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

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

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

Любые решения? Это даже лучший способ сделать это?

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

Ответ 1

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

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

Ответ 2

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

unset($_SESSION['showUpdated'];

должно быть

unset($_SESSION['showUpdated']);

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

Ответ 3

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

EDIT: причина для exit() заключается в том, что он не позволит ему обработать какой-либо дополнительный код и устранит возможность отмены, прежде чем вы захотите проверить после перенаправления.

Ответ 4

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

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

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

Ответ 5

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

if(!empty($_SESSION['showUpdated'])) {

Ответ 6

Или вы можете просто установить его на 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;
}