У меня есть контактная форма contact.php, которая обрабатывается в form-processing.php.
Поля формы хранятся в массиве сеанса (включая ошибки проверки муравьев), и form-processing.php перенаправляет обратно на contact.php в случае ошибки или успеха.
В случае успеха на contact.php отображается сообщение с благодарностью (вместо формы), и сеанс удаляется с помощью session_unset(), за которым следует session_destroy(). Пустая форма должна снова отображаться при обновлении страницы (поскольку массив сеанса будет пустым).
Однако данные в сеансе сохраняются даже после того, как они были unset и destroyed. Как это может быть? Я подтвердил, что сеанс удален, выполнив var_dump до и после session_unset(); session_destroy(); на странице contact.php. Итак, после первого заполнения формы всегда отображается сообщение с благодарностью.
contact.php:
session_start();
if ( $_SESSION['success'] ) {
// display thank you message
session_unset();
session_destroy();
} else {
//display form
}
form-processing.php:
session_start();
//get $_POST array, validate, sanitize and save to $_SESSION
//send form contents by email
if ($email_sent) {
$_SESSION['success'] = true;
}
// redirect to contact.php
Отредактировано для обновления
Это установка Wordpress, и возникла проблема с тем, где запускался сеанс. Я переместил session_start() из файла шаблона в условную функцию в functions.php, и теперь форма работает.






Это должно полностью уничтожить сеанс:
session_unset();
session_destroy();
session_write_close();
session_regenerate_id(true);
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
Вы также можете:
$_SESSION = [];
Спасибо, но это просто не работает (в данном случае) - я могу выполнить var_dump после использования приведенного выше кода, чтобы подтвердить, что сеанс «пуст», только для его «регенерации» с исходными данными при обновлении страницы.
Также очистите cookie перед запуском session_destroy (): if (isset ($ _ COOKIE [session_name ()])) {setcookie (session_name (), '', time () - 42000, '/'); }
Что такое $ email_sent?