php - 删除 POST 数据,使后退按钮不会显示文档已过期

标签 php forms session caching post

当我的页面发帖时,我将所有 $_POST 数据存储在一个单独的 $_SESSION 变量中。我知道返回同一页面的按钮是设计用来显示 Document Expired 消息的。我的希望是让浏览器误以为真的没有任何 $_POST 数据,因此在返回时不显示 Document Expired 消息。我强制完全刷新页面,所以我不担心收到旧数据,因为我已将其存储在 session 中。

我已尝试unset($_POST) 希望这会保留在页面上。但是 $_POST 数据必须被缓存/存储并通过刷新或后退按钮返回。我正在尝试做的事情可能吗?有什么想法吗?

* 更新 * 我的解决方案/答案发布在下面。它发布到一个单独的表单,该表单重定向回原始表单进行处理。不知道为什么投反对票。它几个月来一直运行良好,我不再收到文档过期消息。它还可以防止重复发布。

最佳答案

您可以使用 post - redirect - get 设计模式来实现这一点。
http://en.wikipedia.org/wiki/Post/Redirect/Get

实现此模式的更标准方法是在一个页面上显示、验证和保存表单。

以下解决方案具有以下优点:
1.所有与表单相关的代码都在一个地方。 2.服务端验证简单

我有两个页面,form.php 和 after.php。

表单.php :

if(isPosted()){
    if(dataIsValid($postedData)){ 
// dataIsValid should set $message to show to the user
        saveData($postedData);
        redirect('after.php');
        die();
    }
} else {
    $postedData = $defaultValues;
}
showForm($postedData, $message);

关于php - 删除 POST 数据,使后退按钮不会显示文档已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19188099/

相关文章:

php - 如何使用php重新加载页面,我不使用任何其他局域网。标题不适合我

javascript - 使用 Javascript 提取唯一元素 ID

jQuery 正则表达式,文件名中允许多个点

ruby-on-rails - 如何在解决超时 session 后重新提交带有 POST 请求的表单?

session - Beego Session 不自动向模板传递数据

php - 如何从 include() 文件中创建相对于不同 PHP 文档的链接?

php - 如何按键查找最大和最小日期

php - fopen 的详细错误

python - 如何在 Django 中描述 URL - 仍然需要一个答案

PHP从MYSQL中获取数据