2013-09-25 68 views
2

Im在CodeIgniter中使用PHP在Web應用程序中工作,並且im卡住了:P 它很難解釋,所以我用一個例子來展示它。URL重定向不會總是工作?

我有正常的CodeIgniter控制器。在這個控制器我有這樣的功能:

<?php 
public function groups($subdomain ='') { 

    $this->load->library('MyLogin'); 
    $user_id = $this->mylogin->logged_in(); 


    if ($subdomain == '') { 
     ..... 
    } elseif ($subdomain == 'create') { 
     ..... 
    } elseif ($subdomain == 'join') { 
     ..... 
    } elseif ($subdomain == 'leave') { 
     ..... 
    } elseif ($subdomain == 'assign') { 
     ..... 
    } else { 
     ..... 
    } 
} 

的LOGGED_IN功能檢查,如果誰在加載這個頁面(子頁面)的用戶登錄。如果不是他在這樣的LOGGED_IN功能被自動重定向:

echo header("Location: /user/login"); 

5分鐘前,這工作得很好。現在我創建了一個新的子域'assign'。

現在,如果在沒有登錄即時通訊,並嘗試連接到以下網址我總是得到重定向

localhost/user/groups 
    localhost/user/groups/2 
    localhost/user/groups/create 
    localhost/user/groups/join 
    localhost/user/groups/leave 

之一,但如果IM連接到

localhost/user/groups/assign 

他嘗試加載這個頁面(什麼因爲$ user_id爲空而不起作用)。 爲什麼......這是否發生?

Regards Teifun2

+0

'header()'有** NO **返回值。 'echo header(...)'完全沒有意義。 –

+0

爲了記錄,您對'$ subdomain'的使用不是針對子域的,而是針對子目錄的。 – Dan

+0

@MarcB Ups:P謝謝你會改變這種情況,(但並不能解決我的問題) – Teifun2

回答

1

我建議你從這個修改LOGGED_IN()函數:

echo header("Location: /user/login"); 

要這樣:

header("Location: /user/login"); 
exit; 

我認爲這將解決這個問題。回聲與它無關,只是多餘的。

+0

你是我的英雄:D你能解釋一下爲什麼這是可行的嗎?我的意思是爲什麼它適用於其他3個子目錄,而不是分配? – Teifun2

+0

header()函數只是簡單地讓PHP向瀏覽器發送一個標題值,並指定一些值。在某些情況下,這是'位置'值,這表明瀏覽器應該重定向到其他位置。在代碼級別,header()函數不像return語句,所以代碼將繼續執行。由於您通常總是希望位置標題成爲頁面加載的終點,因此在任何位置標題之後退出總是一個好主意。 – jrebs

+0

好的,謝謝你的幫助。 – Teifun2

0

使用$ _session將用戶登錄到...!所以即使在刷新和換頁後,他仍然會保持登錄狀態。空值不會通過。

+0

問題是不保持登錄,更多4個elseif語句中的一個不會得到hes實際上allredy重定向。 – Teifun2