Ясная переменная сеанса после использования

Действительно ли возможно использовать переменную сеанса, затем сбросить его непосредственно после?

Пример:

//====
//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' переменная сеанса установлена, отобразите "Обновленное" сообщение
  • Сбросьте переменную сеанса (таким образом, мы не видим сообщение на следующей перезагрузке),

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

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

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

12
задан steveneaston 27 July 2010 в 20:29
поделиться

5 ответов

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

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

3
ответ дан 2 December 2019 в 04:42
поделиться

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

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

3
ответ дан 2 December 2019 в 04:42
поделиться

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

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

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

2
ответ дан 2 December 2019 в 04:42
поделиться

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

if(!empty($_SESSION['showUpdated'])) {
1
ответ дан 2 December 2019 в 04:42
поделиться

Или вы можете просто установить 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
ответ дан 2 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: