2015-03-13 49 views
2

我試圖在我的yii應用程序中限制同時登錄(相同的用戶名& pwd),爲此我在用戶表「login_status」中添加了一個字段。如果用戶已登錄,則login_status = 1,如果用戶使用應用程序註銷圖標正常登錄,我們將重置爲login_status = 0.限制同時登錄

基於此login_status,我們限制同時登錄(login_status = 1,拋出錯誤「User已經連接」)。

但是,當用戶關閉瀏覽器選項卡或窗口或系統突然停止時,我們正面臨問題。始終login_status = 1,拋出錯誤「用戶已連接」。

請任何人都可以幫助我解決這個問題!

回答

0

什麼時間超時?如果你的用戶沒有采取任何行動,比如半小時,會話將自動關閉,用戶狀態再次爲0。 事情是你必須記錄用戶何時做任何動作。 也許還有另一個更好的解決方案?

0

沒有直接的方法來做到這一點。您需要強制服務器自動執行一些檢查。你應該使用像Cron Job這樣的東西。表格中應該有一個如last_access_date_time的字段。每次用戶在系統中運行一個操作時,該字段都會被更新。現在您需要編寫一個腳本,例如每5分鐘在服務器上運行一次。此腳本爲每個用戶檢查用戶last_access_date_time,如果該字段大於5分鐘前,則應爲用戶設置login_status = 0。您可以搜索Cron作業以學習如何在服務器上運行計劃任務。

+0

您可以將用戶的最後一個操作記錄爲日期時間,然後僅在用戶登錄時檢查該操作。這樣就不需要Cron作業。 – 2015-03-13 10:25:40

0

除非用戶正確註銷(通過按鈕),否則我看不到如何在沒有某種超時延遲的情況下強制這種行爲。這是假設用戶將從不同的瀏覽器& ip登錄到他的帳戶。如果它來自同一瀏覽器或IP,則可以使用cookiesphp's session data來停止重複的登錄。

0

您可以在每次登錄用戶執行操作時設置登錄狀態,還可以爲此字段添加日期時間。現在你知道用戶最後一次活動的時間。 如果新用戶登錄並且日期時間超過了會話超時時間,則知道該用戶已註銷。你可以登錄新用戶。