2012-01-13 58 views
2

我正在Codeigniter中處理此項目,並且我創建了登錄和註冊腳本,但我不知道如何驗證每個頁面上的用戶。 當用戶登錄會話(Ci session user_data)中存儲的數據時,我可以將它與每個頁面上的數據庫進行比較,以確定會話是否有效? 我正在使用codeigniter的會話類,我將這些值自動存儲在數據庫中。請幫助我我卡在這裏...如何驗證每個頁面上的用戶會話

我的會話是這樣處理的:
1.當有任何用戶到達我的網頁時,他會得到唯一的散列(md5)會話ID,加載。如果它不存在,則不做任何事情。它每5分鐘更換一次。在什麼樣的數據傳遞給這樣我就可以把它比作數據庫以後(每個頁面加載)
2.當用戶登錄

我不知道,如果只存儲了「is_logged」 = 1 Cookie是安全的。我想檢查每個服務器請求上的Cookie。

+0

請注意,在每次頁面加載時查詢數據庫都會對性能造成重大影響。根據您的需要,這可能是合理的,但需要考慮。 – 2012-01-13 19:19:13

回答

4

在成功的登錄,創建一個

$this->session->set_userdata(array('authorized' => true)); 

然後,您可以讓一個auth庫或模型的方法,只要適合你,只是檢查是否存在此會話數據。

function is_logged() 
{ 
    return (bool)$this->session->userdata('authorized'); 
} 

如果FALSE,則用戶未記錄,如果爲TRUE則爲。你可以在每個控制器的身份驗證的方法上調用這個函數,或者在controllr的構造函數中,如果你需要它的所有方法(例如管理面板)

看一看,例如Ion Auth ,其中一個主流的身份驗證庫(CI)處理事件(使用logged_in()方法,它與我的示例代碼中執行的操作相同。請記住,會話是加密的,並且如果存儲在數據庫安全性中則更高)。 https://github.com/benedmunds/CodeIgniter-Ion-Auth/blob/2/libraries/Ion_auth.php

+0

理論上,如果一個本地用戶修改了他的cookies並設置'authorized'= true,即使他沒有登錄,他是否可以登錄?也可以修改本地Cookie嗎? – slimDeviant 2012-01-13 19:16:03

+0

cookies是編寫的,該操作應該不那麼容易。 BEsides,你正在存儲會話在數據庫中,所以不涉及cookie – 2012-01-13 19:19:56

+0

所以可以說我有一個auth()方法作爲__construct類在調用任何其他方法之前檢查會話。我應該檢查數據庫,以確定用戶是否登錄(authorize = 1)或針對cookie?你也可以更清楚地解釋你的第二句話。謝謝 – slimDeviant 2012-01-13 19:27:32

1

會話存儲在服務器上,因此不需要驗證。您只需要驗證您在會話中放置的內容。

會話由用戶提供session_id cookie進行驗證(PHPSESSID)。

另一方面的cookie需要驗證,但不應該使用cookie來存儲關鍵數據,因此它有點沒有實際意義。

+0

我編輯了這個問題,所以檢查它 – slimDeviant 2012-01-13 19:10:07

+0

CI的會話是加註餅乾,而不是原生的PHP $ _SESSION陣列,和OP說他使用CI的會話庫 – 2012-01-13 19:10:44

+0

是的..他編輯了他的問題。我的答案適用於PHP的本地會話處理。 – Halcyon 2012-01-13 19:14:11

0

你應該在你的類調用這個輔助method.If您的用戶登錄正確,則它會繼續,其他明智它會重定向到登錄頁面的構造函數寫在像session_helper.And助手的功能。你的助手應該是這樣的

function session_set() 
    { 
$ch=&get_instance(); 
if($ch->session->userdata('your_session_id')=='') 
{ 
    redirect('your_login_page'); 

} 

和控制器,你應該檢查這樣的(構造函數)

session_set(); 

希望這會爲你

工作
相關問題