会话数据在session_unset和session_destroy之后仍然存在

时间:2018-04-26 16:04:12

标签: php session

我有一个联系表单contact.php,该表单在form-processing.php中处理。

表单字段存储在会话数组中(包括ant验证错误),form-processing.php在错误或成功时重定向回contact.php

成功后,contact.php上会显示感谢信息(而不是表单),并使用session_unset()后跟session_destroy()删除会话。然后在刷新页面时再次显示空白表单(因为会话数组将为空)。

但是,即使在unsetdestroyed之后,会话中的数据仍然存在。怎么会这样?我已在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中的条件函数中,表单现在可以正常工作。

1 个答案:

答案 0 :(得分:0)

这应该完全破坏会话:

session_unset();
session_destroy();
session_write_close();
session_regenerate_id(true);
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
}

你也可以这样做:

$_SESSION = [];