【发布时间】:2018-10-07 10:05:14
【问题描述】:
我有一个联系表contact.php,在form-processing.php 中处理。
表单字段存储在会话数组中(包括 ant 验证错误),form-processing.php 在错误或成功时重定向回contact.php。
成功后,contact.php 上会显示一条感谢消息(而不是表单),并使用 session_unset() 后跟 session_destroy() 删除会话。然后在刷新页面时应该会再次显示空白表单(因为会话数组将为空)。
但是,即使在 unset 和 destroyed 之后,会话中的数据仍然存在。怎么会这样?我已经通过在contact.php 页面上的session_unset(); session_destroy(); 之前和之后执行var_dump 来确认会话已被删除。因此,第一次填写表格后,总是会显示感谢信息。
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 中的条件函数,现在表单可以工作了。
【问题讨论】:
-
什么是 $email_sent?