2012-10-21 34 views
3

如果我忽略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 
    } 
} 

後來我想,如果愛麗絲(未經驗證的訪問者)忽略了302迴應是什麼?她可以在重定向之後看到其他內容嗎?所以我測試了它,現在我完全困惑。有兩種功能可用於發送302重定向。

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

而且從CI的網址助手:

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 」。

有人能指出我在這裏失蹤了什麼嗎?

回答

2

您是否在CI重定向功能中看到exit?所以每當你使用它時,它都會導致你的應用程序停止處理你剩下的任何代碼。這是你正在經歷的「不同」行爲。

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

+0

我正要回答我自己的問題了。我怎麼錯過了那個出口,我不知道... – Rob

+0

碰巧是我們最好的:) –

相關問題