redirect()
302 を無視すると、出力が停止することがわかりますが、停止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
}
}
次に、アリス (認証されていない訪問者) が 302 応答を無視した場合はどうなるだろうかと考えました。リダイレクト後に残りのコンテンツを見ることができますか? それで私はそれをテストしました、そして今私は完全に混乱しています。302 リダイレクトを送信するために使用できる関数が 2 つあります。
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」を返しています。
誰かが私がここで見逃していることを指摘できますか?