我有一个联系表单contact.php
,该表单在form-processing.php
中处理。
表单字段存储在会话数组中(包括ant验证错误),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
中的条件函数中,表单现在可以正常工作。
答案 0 :(得分:0)
这应该完全破坏会话:
session_unset();
session_destroy();
session_write_close();
session_regenerate_id(true);
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
你也可以这样做:
$_SESSION = [];