2011-09-22 143 views
1

我試圖禁止同一用戶同時向我的CakePHP(1.2)驅動的站點進行多次登錄。然而,這並不像我想的那麼容易,因爲如果用戶已經登錄或者沒有登錄,我不知道如何獲取信息。CakePHP:檢查用戶是否已經登錄

我正在使用Cake的Auth組件來驗證用戶。會話由php安裝處理,php將會話數據存儲在文件中。所以我想不可能從控制器訪問會話數據(當然,這些文件不會保存在webroot中)。我想通過使用特殊的數據庫字段來檢查用戶是否登錄,但是如果用戶沒有使用登出方法但只是關閉他的瀏覽器並且無法查明用戶是否已註銷,所以會結束會議。

任何人都可以想到另一種方式來管理呢?我不需要知道每個登錄用戶的所有數據。我需要知道的唯一事情是,如果給定的用戶名登錄在此刻。

在此先感謝。

回答

3

認爲,如果你在你的核心配置文件設置Security.levelhigh,因爲它每次重新生成會話ID CakePHP會自動擁有這種行爲。

Configure::write('Security.level', 'high'); 

另外,其背後的邏輯是,你可以保存用戶的IP /用戶代理的哈希在user表中登錄時,如果用不同的哈希已保存嘗試的一個計算機做一些事情,註銷用戶。這樣只有最新的用戶才能工作。

+0

呵呵,打我吧。設置爲高時,CakePHP已經檢查用戶代理(將其散列並存儲在會話文件中,因此不需要數據庫字段)。有些用戶在使用公有IP池的代理服務器後面,所以我不會檢查IP的變化。 – deizel

+0

哦,忘了+1。 – deizel

+0

聽起來不錯。但會話ID的重新生成似乎具有登錄用戶隨機註銷的副作用。至少在security.level設置爲'medium'時不會發生這種情況。難道我做錯了什麼? – j0ker