我正在开发一个PHP-MySQL应用程序,使注册用户能够输入文本注释。问题是:
我在想3个选项:
现在在我的应用程序的上下文中,我对OPTION 1和OPTION 2的关注是性能PHP-MySQL,因为我已经在推送/从数据库获取数据的同一页面中有各种查询。因此,选项3可能会以不同的方式解决问题。
问题是:如果我选择第3选项,这可以被视为最佳实践吗?意味着清除浏览器缓存是最有效的解决方案吗?我看过那也有后果吗?你的想法很感激!
答案 0 :(得分:4)
在将数据提交到数据库后,只需进行重定向。这是一种常见的做法。
http redirect指示浏览器为指定的网址发布http GET
(而不是用于提交表单的http POST
)。如果在将数据插入数据库后立即执行此操作,则当用户刷新其浏览器时,除了再次看到同一页面之外,不会发生任何事情。
This question on SO告诉您如何使用php重定向。
答案 1 :(得分:4)
将已插入的变量插入数据库
后,取消设置<?php
if(isset($_POST["comment"])){
//store in the database
//on successful storage
unset($_POST["comment"]);
}
?>
因此,当用户刷新页面时,不会回发该值...
答案 2 :(得分:1)
答案 3 :(得分:0)
我会使用选项4:使用一次性表单令牌来验证表单请求。如果请求成功,则使令牌无效。
执行此操作时,即使在重定向后返回到表单也不允许它再次发送表单。此外,这也将使CSRF攻击变得更加困难。
答案 4 :(得分:0)
将数据输入数据库后,使用header或location.href
重定向页面答案 5 :(得分:-4)
我找到了新方法试试这个。
function PreventResendData($invalidpage='index.php'){
if( $_POST && !is_array( $_SESSION['post_var'] ) ) {
$_SESSION['post_var'] = $_POST;
header('location:'.$_SERVER['PHP_SELF']);
}
else if($_SESSION['post_var'])
{
$_POST = $_SESSION['post_var'];
$_SESSION['post_var'] = '';
}
else
{
header("location:".$invalidpage);
}
}