2012-10-21 3 views
3

302를 무시하면 redirect()은 출력을 중지하지만 header()은 표시되지 않습니다. redirect()header()을 사용하여 302 응답을 설정합니다. 다른 행동, 동일한 기능. 뭐라 구요?동일한 리디렉션 기능이 다른 동작을하는 이유

일부 컨텍스트 : CodeIgniter를 사용하여 사이트를 구축하고 있으며 사이트에서 게스트 및 멤버를 처리하는 방법을 알고 있습니다. 이제 컨트롤러

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

:

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

그럼 내가 생각, 앨리스 (인증되지 않은 방문자가) 302 응답을 무시하면 무엇을 CI 코어를 확장

? 리디렉션 후에 나머지 콘텐츠를 볼 수 있습니까? 그래서 나는 그것을 시험했고, 지금 나는 완전히 혼란 스럽다. 302 리디렉션을 보낼 수있는 두 가지 기능이 있습니다.

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

그리고 CI의 URL 도우미에서

:

site_url()

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; 
} 
은 "반환 http://mywebsite.com/login : 여기

redirect('/login'); 

는 내부에서 모습입니다 ".

누군가 내가 여기에서 놓친 것을 지적 할 수 있습니까?

답변

2

exit가 CI 리디렉션 기능에 표시됩니까? 그래서 당신이 그것을 사용할 때마다, 당신은 당신이 남긴 코드를 처리하는 것을 당신의 응용 프로그램이 멈추게 할 것입니다. 이것은 당신이 겪고있는 "다른"행동입니다.

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

+0

나는 내 자신의 질문에도 너무 대답하고 있었다. 어떻게 내가 그 출구를 놓쳤는지, 나는 모른다 ... – Rob

+0

우리 중 최고에 일어난다 :) –

관련 문제