Php 为什么我会得到;您想再次提交此表格吗;即使在重定向之后?
我这里有一个奇怪的问题——见下文 第十页Php 为什么我会得到;您想再次提交此表格吗;即使在重定向之后?,php,codeigniter,Php,Codeigniter,我这里有一个奇怪的问题——见下文 第十页 包含方法为post的窗体 用户提交表单-存在一些表单验证 如果所有操作都验证了我保存的数据,则在会话中设置一条flash数据消息(即查询成功/失败),并将()用户重定向到当前_ur() 现在,我可以看到flash消息,如果我按F5-我得到你想再次提交表单吗 这不应该只是刷新页面吗?如何阻止它再次提交请求? 如果我重定向到第Y页,然后按F5,它不会要求我重新提交吗?我在这里迷路了 好的,伙计们 这不是CodeIgniter问题。这是Firefox的一个
- 包含方法为post的窗体
- 用户提交表单-存在一些表单验证
- 如果所有操作都验证了我保存的数据,则在会话中设置一条flash数据消息(即查询成功/失败),并将()用户重定向到当前_ur()
- 现在,我可以看到flash消息,如果我按F5-我得到你想再次提交表单吗
CodeIgniter
问题。这是Firefox的一个问题。我正在使用14.0.1
版本的Firefox
我在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;
}
您如何执行重定向?你确定你不仅仅是在对CodeIgniter路由执行内部重定向,而不是真正的HTTP重定向吗?你能看到HTTP流量中的重定向吗(你可以用Charles Proxy之类的工具来监控)?@Matt之后还有redirect()。我正在使用CI的redirect()函数。因此,我发布数据,保存数据,并将其重定向回同一URL。有道理吗?明白了。我将删除我的评论,因为它可能会误导。在chrome开发工具中,进入网络选项卡,清除所有请求并激活录制。然后把表格寄出去。你看到了什么?@Quentin-我正在使用CI的重定向('PAGE_URL')-什么是内部重定向?可能是CI错误地发出了307代码?除此之外,如果是这种情况,它似乎是一个FF错误(如果不是,则是一个无处不在的错误)。@DaveRandom-不,它不是307-罪魁祸首是
头('Refresh:0;url='。$uri)代码>-我在上面提到的普通php脚本中尝试了相同的标题,它会生成FF显示确认对话框。对,这就是你的问题<代码>刷新:
是非标准标题。这不能被认为是一个bug,因为没有官方文件定义预期的行为。重定向应使用位置:
标题,POST/Redirect/GET机制应使用303
响应代码。我在对这个问题的评论中提到的代码是正确的、符合RFC的方法。