如果我忽略 302,我会看到redirect()
停止输出,但header()
不会。redirect()
用于header()
设置 302 响应。不同的行为,相同的功能。是什么赋予了?
一些上下文:我正在使用 CodeIgniter 构建一个站点,并且我正在研究该站点应该如何处理访客和成员。
扩展 CI 核心:
class MY_Controller extends CI_Controller {
if (! $authenticated) redirect('/login');
}
现在是控制器:
class Members_only extends MY_Controller {
function index()
{
// Display members only content
}
}
然后我想,如果 Alice(一个未经身份验证的访问者)忽略了 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”。
有人可以指出我在这里缺少什么吗?