我在mysql數據庫中有一個「users」表,在一個字段中,如果用戶在線,我會保存這些信息。cron - 會話過期時更新數據庫
一切正常開的: - 如果某些用戶關閉瀏覽器
,他的在線狀態不會更改爲脫機。
我被告知我可以用cron做到這一點,但我對此一無所知。
我可以將用戶ID保存在他的會話中,並使PHP函數更新數據庫。
但是...我不知道如何使cron的運行PHP(從會話ID)
有多容易呢?
我在mysql數據庫中有一個「users」表,在一個字段中,如果用戶在線,我會保存這些信息。cron - 會話過期時更新數據庫
一切正常開的: - 如果某些用戶關閉瀏覽器
,他的在線狀態不會更改爲脫機。
我被告知我可以用cron做到這一點,但我對此一無所知。
我可以將用戶ID保存在他的會話中,並使PHP函數更新數據庫。
但是...我不知道如何使cron的運行PHP(從會話ID)
有多容易呢?
爲什麼使用cron如果您可以比較用戶的活動時間戳和請求時的當前時間?
我認爲每當用戶在一段時間內未處於活動狀態時,狀態都會脫機。所以你必須將最後一次活動的時間存儲在db中。因此,如果您需要回複用戶的狀態,請將此時間與當前時間進行比較,如果差異超出允許範圍,則返回offline
。
大多數在線系統都有15分鐘的檢查週期。你每次有人做某事時設置一個時間戳,然後如果他們離線,他們不會更新他們的時間戳,並簡單地比較當前時間戳和數據庫中的時間戳,如果超過15分鐘,刪除。
好的,所以如果我理解正確的話...用戶1登錄(更新他的時間戳+如果過期,檢查運行所有其他人,如果他們這樣做,他們的狀態更新在分貝)。用戶2登錄...等等...? – crock
這很簡單。這可能在你的PHP文件中(稱之爲update.php)。
<?php
/*connect to mysql as per normal*/
// log users off (hopefully, you're using enum here, but for an example...)
mysql_query('UPDATE USERS SET STATUS = \'LOGGED_OFF\' '.
// whose last action was more than 14400 seconds ago (4 hours)
'WHERE (CURRENT_TIMESTAMP() - TIMESTAMP(LAST_ACTION)) > 14400');
?>
然後,打開crontab中:
crontab -e命令
並添加此行運行TAST每15分鐘(15號更改爲另一個號碼,如果你喜歡) :
*/15 * * * * /path/to/update.php
聽起來很棒:)謝謝。你可以幫我用「打開crontab」位嗎?如果涉及到cron,我完全是noob。我如何打開crontab? – crock
從'$'鍵入'crontab -e'並按下輸入 – cwallenpoole
謝謝cwallenpoole。這太棒了:) – crock
如果用戶通過單擊註銷按鈕註銷狀態,此時狀態將轉爲脫機狀態。 – crock
當您返回狀態時,請檢查用戶是否已註銷或超時已過期。 –
所以基本上,如果他的時間戳不足以使他離線,我需要爲每個用戶(在db中具有「在線」狀態)運行檢查。每次有人做某事時我都必須這樣做? – crock