我覺得你的做法是進入一個稍微走錯了方向,但它是沒有錯的。 你應該多分一點。
什麼會話實際上做,是存儲所需要在請求的倍數的數據量。
的會話表你笨有沒有任何用戶信息。它只負責存儲會話相關數據(session_id等)。一旦你建立了表格,你可以使用CodeIgniter會話,就像你習慣的那樣。它將爲您處理會話管理流程。
所以讓我們通過登錄過程。
首先你需要一個表格來存儲用戶信息。該表最簡約的實現將是:
users(user_id, username, password)
我存儲在會話中的唯一信息是用戶標識。所以無論何時用戶輸入你的頁面,你都應該檢查你的用戶ID是否有sessionfield。
if($this->session->userdata('user_id'))
{
//User is logged in
}
else
{
//User is not logged in
}
如果用戶沒有登錄,您需要顯示您的登錄表單。用戶發送表單後,您需要驗證輸入並檢查登錄嘗試是否成功。您的模型方法可能如下所示
public function attemptLogin($username, $password)
{
$query = $this->db->get_where('users', array(
'username' => $username,
'password' => $this->mysecurityclass->superDuperHashMethod($password)
));
if($query->num_rows() == 0)
return false;
return $query->row()->user_id;
}
我們在這裏做的是檢查是否存在與用戶輸入匹配的數據集。正如你問我提供了一個簡單的例子,如何做哈希。當然,你需要自己實現散列功能,或者使用任何可以使用的類。隨你便。也許你應該更多地封裝它,並且已經將哈希密碼傳遞給方法。
如果輸入的憑證與用戶表中的數據集匹配,則該方法將返回用戶標識。我們知道用戶已成功登錄。一旦你將用戶ID存儲在你的會話中。
$userid = $this->user_model->attemptLogin($username, $pass);
if(!$userid)
{
//GTFO, login was not successfull
}
else
{
$this->session->set_userdata('user_id', $userid);
redirect('home');
}
因此,當登錄成功設置了會話密鑰和用戶重定向。現在這個過程又開始了。但現在我們有一個會話集,我們的初始檢查是否會通過會話字段集。我們的用戶已登錄。
要將用戶登出,您只需簡單地銷燬會話即可。由於會話密鑰user_id將不會再設置,因此我們的初始檢查將返回false,並且用戶將再次被提示到登錄表單。
如你所見。您不必關心會話如何在內部處理。隨意詢問是否有不清楚的地方。
說明:代碼示例僅用於說明目的。你需要自己考慮執行:)
快樂編碼!