Очистить переменную сеанса после использования
Можно ли использовать переменную сеанса, а затем отменить ее сразу после этого?
Пример:
//====
//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", отобразите сообщение "Обновлено"
- Отмените настройку переменной сеанса (поэтому мы не увидим сообщение на следующем перезагрузить)
В настоящее время проблема заключается в том, что если вы сразу же отключите переменную сеанса; Это как если бы вы отключили ее перед частью "если существует".
Какие-нибудь решения? Это вообще лучший способ сделать это?
Большое спасибо!
6 answers
Похоже, это должно сработать. Убедитесь, что вы вызываете session_start() перед попыткой использовать сеанс, и всегда выходите() или умирайте() после заголовка перенаправления.
Я делаю то, что вы делаете, немного по-другому. Я сохраняю элемент "сообщение" в сеансе. Я вставлю текст типа "Ваши данные были сохранены", сообщения об ошибках и т. Д. Затем на каждой странице (фактически в классе шаблонов страниц) я проверяю, установлен ли $_SESSION['message']
, а не пуст. Если там что-то есть, я показываю сообщение и установите значение в пустую строку или null.
Я заметил небольшую ошибку в исходном примере, которая может вызвать другие проблемы.
unset($_SESSION['showUpdated'];
Должно быть
unset($_SESSION['showUpdated']);
Не включение этого конца )
в unset
приведет к ошибке.
Я делаю это время от времени. У меня никогда не было с этим никаких проблем. Но то, что я бы добавил к вашему, - это вызов функции exit()
после перенаправления заголовка.
ИЗМЕНИТЬ: Причина exit()
заключается в том, что это помешает ему обрабатывать любой дальнейший код и исключит возможность отмены установки до того, как вы захотите проверить после перенаправления.
Вызов заголовка без выхода после продолжит запуск страницы.
header("Location: http://www.mysite.com/settings");
exit;
Используя это вместо этого, следует закрыть страницу и не отменять настройку переменной сеанса при вызове той же страницы.
Просто проверьте, существует ли он. Это безопасно сделать до того, как он будет определен, и сообщит вам ваш ответ после того, как он будет определен.
if(!empty($_SESSION['showUpdated'])) {
Или вы можете просто установить для него значение 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; }