我在这里遇到了一个奇怪的问题-请参阅下文。
第X页
- 包含方法为post的表单
- 用户提交表单-有一些表单验证
- 如果一切都有效,我保存数据,在会话中设置一条flash数据消息(即查询成功/失败),并将用户重定向()到current_ur()
- 现在,我可以看到闪烁的消息,如果我按F5-我明白了,你想再次提交表格吗
这不应该只是刷新页面吗?如何阻止它再次提交请求?如果我重定向到第Y页,并在那里按F5,那么它不会要求我重新提交吗?我在这里迷路了!
好吧,伙计们
这不是CodeIgniter
问题。这是Firefox
的问题。我使用的是Firefox
的14.0.1
版本。
我在IE 7, 8, 9
、Safari 5,
和Chrome
(最新)中尝试了相同的表单和流程——它们没有显示在F5
上重新提交表单的确认对话框。
更新
在firefox中,我收到了这个消息-
要显示此页面,Firefox必须发送重复的信息执行的任何操作(如搜索或订单确认)早些时候。
我只是设置了另一个脚本(没有CI),并在Firefox中进行了测试。我尝试创建类似的过程(即发布并重定向到同一页面)。。。我根本没收到这个消息。刷新工作正常所以我现在就回到CI
更新2
好吧,我想我现在已经破解了-
我使用的是CI的重定向函数——见下文——第二个参数的默认值为"auto",当它是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;
}