Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我会得到;您想再次提交此表格吗;即使在重定向之后?_Php_Codeigniter - Fatal编程技术网

Php 为什么我会得到;您想再次提交此表格吗;即使在重定向之后?

Php 为什么我会得到;您想再次提交此表格吗;即使在重定向之后?,php,codeigniter,Php,Codeigniter,我这里有一个奇怪的问题——见下文 第十页 包含方法为post的窗体 用户提交表单-存在一些表单验证 如果所有操作都验证了我保存的数据,则在会话中设置一条flash数据消息(即查询成功/失败),并将()用户重定向到当前_ur() 现在,我可以看到flash消息,如果我按F5-我得到你想再次提交表单吗 这不应该只是刷新页面吗?如何阻止它再次提交请求? 如果我重定向到第Y页,然后按F5,它不会要求我重新提交吗?我在这里迷路了 好的,伙计们 这不是CodeIgniter问题。这是Firefox的一个

我这里有一个奇怪的问题——见下文

第十页

  • 包含方法为post的窗体
  • 用户提交表单-存在一些表单验证
  • 如果所有操作都验证了我保存的数据,则在会话中设置一条flash数据消息(即查询成功/失败),并将()用户重定向到当前_ur()
  • 现在,我可以看到flash消息,如果我按F5-我得到你想再次提交表单吗
这不应该只是刷新页面吗?如何阻止它再次提交请求? 如果我重定向到第Y页,然后按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的方法。