使用codeigniter來開發我的最新項目。這就是說,處理登錄會話的「最佳」方式是什麼?現在,我檢查數據庫的用戶名/密碼。如果它匹配,我設置各種會話變量,其中之一是用戶名。在整個我的網站中,我檢查用戶是否登錄。我還閱讀了各種博客,其中人們實際上根據某種類型的php會話ID檢查會話。如何處理登錄驗證和會話
所以我想我的問題是,有什麼方法使網站安全?顯然,我不會在cookie中保存任何內容,會話將保存在某種數據庫表中。
使用codeigniter來開發我的最新項目。這就是說,處理登錄會話的「最佳」方式是什麼?現在,我檢查數據庫的用戶名/密碼。如果它匹配,我設置各種會話變量,其中之一是用戶名。在整個我的網站中,我檢查用戶是否登錄。我還閱讀了各種博客,其中人們實際上根據某種類型的php會話ID檢查會話。如何處理登錄驗證和會話
所以我想我的問題是,有什麼方法使網站安全?顯然,我不會在cookie中保存任何內容,會話將保存在某種數據庫表中。
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();
。
根據我的經驗有幾個東西,該框架爲您做的:
你絕對是在正確的軌道上。
爲了讓您的登錄過程的安全:
我還沒有親自使用CodeIgniter,但我很確定像這樣的成熟框架將有類來處理默認內置的問題。
這裏是CI link
是的,這就是我打算做的。我認爲最大的問題是我沒有權利是,我不使用MySQL,將會話直接綁定到mongodb(我使用的數據庫),所以我的問題是如何生成一個唯一的會話ID並將其存儲到mongodb中,然後在整個站點中交叉引用它是否檢查用戶名是否設置爲「安全「夠了嗎?我非常懷疑它,我呃ld會遇到跨站點劫持或任何它被稱爲。 – luckytaxi 2010-01-25 21:51:30
默認情況下,PHP使用會話數據存儲的文件系統,您不需要*在任何地方存儲任何內容。請閱讀http://www.php.net/manual/en/book.session.php上的PHP會議。至於會話修復攻擊,只要你不使用url/get參數來在頁面間傳送會話ID,那麼你大部分都是安全的。 – 2010-01-25 22:52:10
如果您希望將會話ID存儲在數據庫中,可以使用session_id()函數http://www.php.net/manual/en/來獲取(或設置該事項)當前會話ID。 function.session-id.php。另外,如果您發現它們有幫助,請記住注意並接受答案。 – 2010-01-25 22:54:43
一個快速教程認證不管你保存到一個會話什麼它非常安全,因爲其只保存到你的(但願不是shared-)hostserver。如果您想使用cookie,請僅存儲通過數據庫鏈接到用戶數據的令牌。我也非常肯定,ci有一個基本的認證模塊,如果不是它不遲到切換到kohana一個良好的認證模塊和ORM善良。
看起來像CI保存一個Cookie,並在用戶的瀏覽器上加密session_id。我試圖找出一種方法來獲取生成的session_id並將其存儲在我的數據庫中。我不使用mysql,所以我不能使用他們已經預置的東西。 – luckytaxi 2010-01-25 21:52:30
我看到了這一點,並使用它基於Cookie的會話。但是,將它寫入mysql不是一個選項。有了這個說法,我已經決定不把W /會話庫弄亂了,我將把mysql引入到我的環境中。除了會話處理以外,我可以在MongoDB上保留其他所有內容。 – luckytaxi 2010-01-26 15:28:57