2012-12-11 21 views
1

使用CodeIgniter我正在檢查是否存在一個cookie通過使用isset()函數,並根據我重定向到其他控制器。現在我的問題是我得到一個重定向循環,因爲check_logged_in函數認爲cookie不存在。解決! PHP:cookie存在,但函數沒有找到它使用isset

這裏是我的代碼:

此功能駐留在login_helper

function check_logged_in() 
{ 
    if(!isset($_COOKIE['uid'])) 
    { 
     redirect('users/login'); 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
} 

該下一功能駐留在home控制器並調用check_logged_in()函數,如上所述。

public function index() 
{ 
    $this->load->helper('url'); 
    $this->load->helper('login'); 
    $logged_in = check_logged_in(); 

    if($logged_in === TRUE) 
    { 
     $this->load->view('templates/header'); 
     $this->load->view('pages/home_view'); 
     $this->load->view('pages/advanced_search_view'); 
     $this->load->view('pages/contact_information_view'); 
     $this->load->view('templates/footer'); 
    } 
} 

下一個功能駐留在users控制器

public function login() 
{ 
    if(isset($_COOKIE['uid'])) 
    { 
     redirect(home); 
    } 
    else 
    { 
     -some unrelated code- 
    } 

當該cookie確實存在和我運行任一home/index函數或users/login函數I在重定向循環結束。當cookie不存在時,我最終登錄到我的登錄頁面,因此看起來users/login Cookie檢查正常工作,但home/index函數沒有。


我試圖把

if(!isset($_COOKIE['uid'])) 
{ 
    redirect('users/login');  
} 

直接在home/index功能,但它給了同樣的問題。

+1

您是否嘗試過echo $ _COOKIE ['uid']?它是NULL嗎?似乎這將是一個開始的好地方。 – pzkpfw

+1

你如何設置cookie? Cookie的域名,路徑? – SubRed

+0

當我回應時,我得到cookie的價值,在我的案例中它是'1234'。 – Dasyel

回答

0

將登錄檢查放在構造函數中。給它一個通用名稱 - 並讓它做一些有用的事情,比如從cookie返回信息,和/或從數據庫查找。

function __construct() { 
parent::__construct(); 
// load the model 
$this->load->model('login_model'); 

// if logged in, return $this->user 
if(! $this->user = $this->login_model->verifyUser()) 
{ redirect('users/login', 'refresh'); } 

} // construct 

現在$ this-> user可用於您的方法,一直到視圖。

如果你需要一個「管理員」,可以做更多的則用戶,以同樣的方式

$this->admin = $this->login_model->verifyAdmin() ; 

然後你就可以改變verifyAdmin()會發生什麼,和你的類沒有得到更新。

相關問題