我在这里有一个奇怪的问题 - 见下文。
第 X 页
- 包含一个具有作为帖子的方法的表单
- 用户提交表单 - 有一些表单验证。
- 如果一切都验证我保存数据,在会话中设置一个闪存数据消息(即查询成功/失败)并将用户重定向()到 current_ur()
- 现在,我可以看到 Flash 消息,如果我按F5- 我得到你想再次提交表格吗?
这不应该只是刷新页面吗?如何阻止它发出另一个提交请求?如果我重定向到页面 Y,然后按F5那里,那么它不会要求我重新提交吗?我在这里迷路了!
我在这里有一个奇怪的问题 - 见下文。
第 X 页
这不应该只是刷新页面吗?如何阻止它发出另一个提交请求?如果我重定向到页面 Y,然后按F5那里,那么它不会要求我重新提交吗?我在这里迷路了!
好了朋友们
这不是CodeIgniter
问题。这是一个问题Firefox
。我正在14.0.1
使用Firefox
.
我在IE 7, 8, 9
, Safari 5,
Chrome
(最新)中尝试了相同的表格和流程 - 他们没有向我显示确认对话框以重新提交表格F5
。
更新
在 Firefox 中,我收到此消息 -
要显示此页面,Firefox 必须发送将重复之前执行的任何操作(例如搜索或订单确认)的信息。
我只是设置了另一个脚本(没有 CI)并在 Firefox 中进行了测试。我试图创建类似的过程(即发布并重定向到同一页面)......我根本没有收到这条消息。刷新工作得很好。所以我现在把它带回CI?
更新 2
好的,我想我现在已经破解了 -
我正在使用 CI 的重定向功能 - 见下文 - 第二个参数将默认值设为“自动”,并且当auto
它发送标头时,header('Refresh:0;url='.$uri);
这会使 Firefox 抛出上述消息。如上所述,我在其他浏览器中没有得到相同的行为。我希望它可以帮助某人。
function redirect($uri = '', $method = 'auto', $http_response_code = 302)
{
if ( ! preg_match('#^https?://#i', $uri))
{
$uri = site_url($uri);
}
// IIS environment likely? Use 'refresh' for better compatibility
if (DIRECTORY_SEPARATOR !== '/' && $method === 'auto')
{
$method = 'refresh';
}
switch($method)
{
case 'refresh':
header('Refresh:0;url='.$uri);
break;
default:
header('Location: '.$uri, TRUE, $http_response_code);
break;
}
exit;
}