2010-01-25 73 views
0

使用codeigniter來開發我的最新項目。這就是說,處理登錄會話的「最佳」方式是什麼?現在,我檢查數據庫的用戶名/密碼。如果它匹配,我設置各種會話變量,其中之一是用戶名。在整個我的網站中,我檢查用戶是否登錄。我還閱讀了各種博客,其中人們實際上根據某種類型的php會話ID檢查會話。如何處理登錄驗證和會話

所以我想我的問題是,有什麼方法使網站安全?顯然,我不會在cookie中保存任何內容,會話將保存在某種數據庫表中。

回答

0

CodeIgniter不使用本機PHP會話。它生成自己的會話數據。您需要通過調用$this->load->library('session');加載庫'會話'。

我所做的是在用戶使用加密類進行註冊時加密密碼。這是通過調用$this->load->library('encrypt');然後$this->encrypt->encode("user_password")完成的。您需要通過在您的config.php文件中寫入加密密鑰來指定加密密鑰:$ config ['encryption_key'] =「您的密鑰」;.

然後,要驗證憑據,我從數據庫獲取加密的密碼,並調用$this->encrypt->decode("user_password")並檢查它是否與用戶編寫的密碼匹配。

驗證憑據後,我將用戶保存在CodeIgniter會話中的信息儲存起來。這是通過設置一個具有所需參數的數組然後調用$this->session->set_userdata($newdata);來完成的。

例(從http://codeigniter.com/user_guide/libraries/sessions.html複製):

$newdata = array(
       'username' => 'johndoe', 
       'email'  => '[email protected]', 
       'logged_in' => TRUE 
      ); 

$this->session->set_userdata($newdata); 

然後,以檢查用戶登錄,您只需要每個方法測試中,如果用戶通過調用像這樣登錄:$this->session->userdata('logged_in');

要註銷用戶,只需銷燬會話:$this->session->sess_destroy();

根據我的經驗有幾個東西,該框架爲您做的:

  1. 它一定的閒置時間後破壞了會議。
  2. CodeIgniter從表單中清除輸入數據。例如,如果你試圖輸入「(」或「'」,或者可以打破或創造不需要的SQL語句的任何其他字符,笨逃脫他們從你的。
  3. 它的岩石,它是非常靈活的,完整的。
  4. The user guide is your friend.它基本上包含你需要知道的一切,並給你如何做到這一點的例子。
+0

我看到了這一點,並使用它基於Cookie的會話。但是,將它寫入mysql不是一個選項。有了這個說法,我已經決定不把W /會話庫弄亂了,我將把mysql引入到我的環境中。除了會話處理以外,我可以在MongoDB上保留其他所有內容。 – luckytaxi 2010-01-26 15:28:57

4

你絕對是在正確的軌道上。

  • 對數據庫進行身份驗證憑據
  • 會話數據
  • 商店認證狀態
  • 檢查用戶在每次訪問一個頁面驗證要求身份驗證

爲了讓您的登錄過程的安全:

  • 不要將密碼以純文本形式存儲在數據庫中,存儲散列(sha1( )與鹽效果很好)
  • 消毒是來自於用戶的任何和所有輸入(包括登錄表單數據)
  • 不要存放你不想在cookie中篡改任何數據

我還沒有親自使用CodeIgniter,但我很確定像這樣的成熟框架將有類來處理默認內置的問題。

這裏是CI link

+0

是的,這就是我打算做的。我認爲最大的問題是我沒有權利是,我不使用MySQL,將會話直接綁定到mongodb(我使用的數據庫),所以我的問題是如何生成一個唯一的會話ID並將其存儲到mongodb中,然後在整個站點中交叉引用它是否檢查用戶名是否設置爲「安全「夠了嗎?我非常懷疑它,我呃ld會遇到跨站點劫持或任何它被稱爲。 – luckytaxi 2010-01-25 21:51:30

+0

默認情況下,PHP使用會話數據存儲的文件系統,您不需要*在任何地方存儲任何內容。請閱讀http://www.php.net/manual/en/book.session.php上的PHP會議。至於會話修復攻擊,只要你不使用url/get參數來在頁面間傳送會話ID,那麼你大部分都是安全的。 – 2010-01-25 22:52:10

+0

如果您希望將會話ID存儲在數據庫中,可以使用session_id()函數http://www.php.net/manual/en/來獲取(或設置該事項)當前會話ID。 function.session-id.php。另外,如果您發現它們有幫助,請記住注意並接受答案。 – 2010-01-25 22:54:43

0

一個快速教程認證不管你保存到一個會話什麼它非常安全,因爲其只保存到你的(但願不是shared-)hostserver。如果您想使用cookie,請僅存儲通過數據庫鏈接到用戶數據的令牌。我也非常肯定,ci有一個基本的認證模塊,如果不是它不遲到切換到kohana一個良好的認證模塊和ORM善良。

+0

看起來像CI保存一個Cookie,並在用戶的瀏覽器上加密session_id。我試圖找出一種方法來獲取生成的session_id並將其存儲在我的數據庫中。我不使用mysql,所以我不能使用他們已經預置的東西。 – luckytaxi 2010-01-25 21:52:30