0

我在这里有一个奇怪的问题 - 见下文。

第 X 页

  • 包含一个具有作为帖子的方法的表单
  • 用户提交表单 - 有一些表单验证。
  • 如果一切都验证我保存数据,在会话中设置一个闪存数据消息(即查询成功/失败)并将用户重定向()到 current_ur()
  • 现在,我可以看到 Flash 消息,如果我按F5- 我得到你想再次提交表格吗?

这不应该只是刷新页面吗?如何阻止它发出另一个提交请求?如果我重定向到页面 Y,然后按F5那里,那么它不会要求我重新提交吗?我在这里迷路了!

4

1 回答 1

0

好了朋友们

这不是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;
}
于 2012-08-03T13:44:23.363 回答