php - 为什么相同的重定向功能会给我不同的行为

标签 php codeigniter redirect http-status-code-302

如果我忽略 302,我会看到 redirect() 停止输出,但 header() 不会。 redirect() 使用 header() 设置 302 响应。不同的行为,相同的功能。给了什么?

一些背景信息:我正在使用 CodeIgniter 构建一个网站,我正在研究该网站应该如何处理 guest 和成员(member)。

扩展 CI 核心:

class MY_Controller extends CI_Controller {
    if (! $authenticated) redirect('/login');
}

现在是一个 Controller :

class Members_only extends MY_Controller {
    function index()
    {
    // Display members only content
    }
}

然后我想,如果爱丽丝(一个未经身份验证的访问者)忽略了 302 响应怎么办?重定向后她能看到其余内容吗?所以我测试了它,现在我完全糊涂了。我可以使用两个函数来发送 302 重定向。

header('Location: http://mywebsite.com/login', TRUE, 302);

来自 CI 的 URL 助手:

redirect('/login');

从里面看是这样的:

function redirect($uri = '', $method = 'location', $http_response_code = 302)
{
    if ( ! preg_match('#^https?://#i', $uri))
    {
        $uri = site_url($uri);
    }

    switch($method)
    {
        case 'refresh' : header("Refresh:0;url=".$uri);
                         break;
        default        : header("Location: ".$uri, TRUE, $http_response_code);
                         break;
    }
    exit;
}

site_url() 返回“http://mywebsite.com/login”。

有人可以指出我在这里遗漏了什么吗?

最佳答案

你在 CI 重定向函数中看到 exit 了吗?因此,无论何时您使用它,它都会导致您的应用程序停止处理您留下的任何代码。这是您正在经历的“不同”行为。

http://php.net/manual/en/function.exit.php

关于php - 为什么相同的重定向功能会给我不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994093/

相关文章:

javascript - rails : redirect with call to Ajax

php - 来自 php/html/css 的代码标签脚本

php - Codeigniter RESTful API

iphone - 智能手机和 Googlebot-mobile 的重定向

javascript - HTTParty 未返回 LinkedIn 页面

php - CodeIgniter Active Record - 防止重复,按日期排序

php - 将数组元素添加到数据库查询形成的数组中

javascript - 使用 javascript 从 txt 文件中读取数据,每 5 分钟一次

php - 我无法与 ReactPHP 的 Pawl 和 Ratchet 交叉通信

codeigniter - PayPal 快速结帐服务器端,身份验证失败