PHP,在刷新和显示消息时禁用 POST
PHP, disabling the POST on refresh & displaying message
我有一个包含此代码的表格:
<form method="post" enctype="multipart/form-data">
所以基本上,每当访问者单击“提交”时,页面就会刷新,我就会进行操作。一切正常,但似乎我必须通过以下方式在刷新时禁用 re-post 之间做出选择:
header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
或向我显示错误和成功消息,但如果我这样做,如果访问者刷新页面,则重新提交。
我在网上阅读了两种解决此问题的方法:
- 重定向到另一个页面(不能采用此路由,因为它会中断访问流程)
- 将我的消息数组存储在 SESSION 变量中(我的问题是 SESSION 最终会停留太久,如果用户刷新或重新访问页面消息数组需要为空...)
那么,还有其他方法可以实现吗?
为 ex 生成一个像时间戳一样的唯一票证。将其作为表单的附加参数。现在您可以将处理后的请求存储在会话或 cookie 中。一个简单的例子:
客户:
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="requestTicket" value="<?php echo time(); ?>" />
...
服务器:
if(!array_key_exists("rt", $_SESSION))
$_SESSION["rt"] = array();
if(!array_key_exists($_REQUEST["requestTicket"], $_SESSION["rt"])) {
//do the job
//...
$_SESSION["rt"][$_REQUEST["requestTicket"]] = true;
}
我有一个包含此代码的表格:
<form method="post" enctype="multipart/form-data">
所以基本上,每当访问者单击“提交”时,页面就会刷新,我就会进行操作。一切正常,但似乎我必须通过以下方式在刷新时禁用 re-post 之间做出选择:
header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
或向我显示错误和成功消息,但如果我这样做,如果访问者刷新页面,则重新提交。
我在网上阅读了两种解决此问题的方法:
- 重定向到另一个页面(不能采用此路由,因为它会中断访问流程)
- 将我的消息数组存储在 SESSION 变量中(我的问题是 SESSION 最终会停留太久,如果用户刷新或重新访问页面消息数组需要为空...)
那么,还有其他方法可以实现吗?
为 ex 生成一个像时间戳一样的唯一票证。将其作为表单的附加参数。现在您可以将处理后的请求存储在会话或 cookie 中。一个简单的例子:
客户:
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="requestTicket" value="<?php echo time(); ?>" />
...
服务器:
if(!array_key_exists("rt", $_SESSION))
$_SESSION["rt"] = array();
if(!array_key_exists($_REQUEST["requestTicket"], $_SESSION["rt"])) {
//do the job
//...
$_SESSION["rt"][$_REQUEST["requestTicket"]] = true;
}