2013-09-16 16 views
1

我是codeigniter框架的新手,對於如何設置進程來處理持久登錄感到好奇。我正在將現有網站遷移到codeigniter,並且所有內容都已設置,只要創建cookie,保存和更新數據庫中的令牌,即持久登錄的平均最佳實踐。如何在codeigniter中設置持久登錄?

我不確定,因爲我是codeigniter的新手(這可能會很簡單,至少我希望如此)是如何處理用戶系統上的cookie檢查?在舊的應用程序中,我編寫了一個名爲「create_user_session()」的函數,我在該網站的每個頁面頂部調用了該函數。此會話檢查用戶是否已登錄,如果不是,則檢查用戶機器上是否存在cookie,如果是,則使用cookie中的令牌記錄用戶。

我的問題是在codeigniter中我應該設置這個過程?我假設有一種方法可以處理這種情況,而無需在我的控制器的每個人中都調用「create_user_session()」函數...至少這就是我所希望的。任何有關如何處理這種情況的見解,我們將不勝感激! :)

* 編輯 我計劃在具有將被用來處理訪問登錄,出,註冊用戶,刪除用戶,用戶所需要的機型「會話」控制器等

+0

你有看了看會議庫? http://ellislab.com/codeigniter/user-guide/libraries/sessions。html – stormdrain

+0

我剛剛通過該文檔閱讀,如果我一旦你自動加載會話類codeigniter,然後知道執行會話處理任務的任何時候請求頁面正確理解?如果是這種情況,那麼我應該擴展會話類來利用我的永久登錄功能? – commanderZiltoid

+0

查看答案。我建議擴展控制器而不是會話庫。 – stormdrain

回答

2

假設你的「持久登錄函數「只是自動登錄有cookie/session的用戶,CodeIgniter的會話庫會爲你處理。

如果您自動加載會話庫,配置項會在每次加載頁面時更新會話。

爲了檢查頁面載入的會話,你可以把檢查放在控制器的構造函數,控制器方法中,或者你可以創建一個擴展控制器來爲你做全面的 - 這可能是最簡單並且最有意義。

application/core/MY_Controller.php 

class MY_Controller extends CI_Controller{ 
    public function __construct() { 
     parent::__construct(); 
     if($this->session->userdata('session_id') == FALSE) { 
      redirect('/login'); 
     } 
    } 
} 

控制器:需要

身份驗證:不要求

application/controllers/Whatever.php 

class Whatever extends MY_Controller { 

    // have to be logged in to see anything in here 

} 

AUTH:

application/controllers/Login.php 

class Login extends CI_Controller{ 

    // don't have to be logged in to see stuff here since 
    // we're extending CI_Controller and not MY_Controller 

} 
+0

__construct()方法應該包含「parent :: construct();」嗎?我將你的答案與jonixj的答案進行比較,並且在擴展該類時看到他在調用CI_Controller方法的構造方法,然後在每個擴展它的控制器中調用擴展類的構造方法? – commanderZiltoid

+0

對,對不起。把它扔到那裏,否則CI的其餘部分將不可用:/除非你想爲控制器創建你自己的構造函數,否則在控制器中不需要'function __construct(){}'。請參閱http://ellislab.com/codeigniter/user-guide/general/controllers.html#constructors – stormdrain

0

不要在每個控制器中檢查cookie,而應該在覈心目錄中創建一個MY_Controller.php,並讓應用程序中的所有控制器都從該控制器擴展。

這是非常方便的autenthication以及許多其他的東西,你不想在整個應用程序重複。

例如:

文件:核心/ MY_Controller.php

class MY_Controller extends CI__Controller { 
    function construct() 
    { 
     parent::construct(); 
     create_user_session(); 
    } 
} 

然後讓所有的控制器從MY_Controller而非是CI_Controller延長:

class Users extends MY_Controller { 
    function construct() 
    { 
     parent::construct(); 
     [...] 
    } 

    [...] 
}