3

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」を返しています。

誰かが私がここで見逃していることを指摘できますか?

4

1 に答える 1

2

exitCI リダイレクト機能にが表示されますか? したがって、それを使用するたびに、アプリケーションは残っているコードの処理を停止します。これは、あなたが経験している「異なる」動作です。

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

于 2012-10-21T01:26:44.157 に答える