Очистить переменную сеанса после использования
Можно ли использовать переменную сеанса, а затем отключить ее непосредственно после?
Пример:
//====
//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;
}