2013-03-04 81 views
3

我有一個腳本,將登錄和註銷用戶。它完美的作品。現在我已經擁有一個小部件,可以計算註冊和激活的用戶數量以及有多少用戶在線。我通過在我的用戶數據庫中有一個表示online = 1或0的字段來完成此操作。當用戶登錄時,online = 1並在線註銷= 0.現在我沒有考慮到該字段只是正在更新因爲用戶正在做一些事情。我沒有考慮到會議超時。PHP登錄/註銷如果會話超時= true做某事

如何創建一個類似於會話超時= true的函數,然後更新用戶在線設置= 0,其中username = $ username和user_id = $ user_id。

回答

3

在您的數據庫表中,添加另一列,如last_seen。每次看到用戶在線時都要更新。在一段時間不活動之後,它們將被標記爲不活動。事實上,我建議你用這個替換你的online字段。

例如,

ALTER TABLE users CHANGE COLUMN `online` `online` DATETIME; -- SAMPLE SQL query only 

要檢查有多少用戶在線:

SELECT * FROM users WHERE online>(NOW()-INTERVAL 1 HOUR); -- SELECTS all users online in the past hour. 

如果用戶註銷時,你可以簡單地設置online = NOW()-INTERVAL 1 HOUR。或者,您還可以保留以前的online字段,並且您可以檢查用戶是否閒置(使用我的建議)或online=0

+0

登錄到頁面更新時,用戶設置了last_action = UNIX_TIMESTAMP()或DATETIME()?其中user_id = $ user_id,並在用戶轉到時將其添加到網站的每個頁面。並在我的用戶在線功能,這是來自online = 1和last_action>(UNIX_TIMESTAMP() - 3600)的用戶的select count('user_id')? – 2013-03-05 19:48:00

+0

糟糕。請看我更正的答案。 UNIX_TIMESTAMP()返回一個整數,它不適用於DATETIME字段。 – rationalboss 2013-03-05 21:08:38

+0

在我檢查用戶是否在線的領域,如果日期在登錄後過了5分鐘2013-03-07 08:05:57,它會不會顯示該用戶? – 2013-03-07 13:07:11

3

而不是嘗試使用布爾值來查看是否有人登錄,請嘗試使用TIMESTAMP。然後,您可以根據某人離開的時間執行更準確的邏輯。如果上次有人在您的網站上加載網頁的時間是30分鐘,那麼您認爲他們在線嗎?你甚至認爲他們在鍵盤上?

0

如果您想要,會話將只會超時。這個問題實際上是'How do I expire a PHP session?'

的重複代碼僅在提供php頁面時執行,所以您需要跟蹤上次用戶處於活動狀態時使用會話變量跟蹤上一次頁面被送達給該用戶。然後,無論何時向用戶提供任何php頁面,都要檢查超時時間是否已經過去,如果有用戶註銷,請參閱link舉例。

0

添加lastOnline字段,其中存儲上次用戶活動的時間戳。 在每個「n」秒鐘更新時間戳的頁面上有一些ajax功能。

要檢查用戶是否在線 - 同時檢查:在線字段和時間戳。如果時間戳記的更新時間超過「n」秒 - 即使在線字段等於1,用戶也不在線。