2011-07-15 21 views
2

我在mysql數據庫中有一個「users」表,在一個字段中,如果用戶在線,我會保存這些信息。cron - 會話過期時更新數據庫

一切正常開的: - 如果某些用戶關閉瀏覽器

,他的在線狀態不會更改爲脫機。

我被告知我可以用cron做到這一點,但我對此一無所知。

我可以將用戶ID保存在他的會話中,並使PHP函數更新數據庫。

但是...我不知道如何使cron的運行PHP(從會話ID)

有多容易呢?

回答

0

爲什麼使用cron如果您可以比較用戶的活動時間戳和請求時的當前時間?

我認爲每當用戶在一段時間內未處於活動狀態時,狀態都會脫機。所以你必須將最後一次活動的時間存儲在db中。因此,如果您需要回複用戶的狀態,請將此時間與當前時間進行比較,如果差異超出允許範圍,則返回offline

+0

如果用戶通過單擊註銷按鈕註銷狀態,此時狀態將轉爲脫機狀態。 – crock

+0

當您返回狀態時,請檢查用戶是否已註銷或超時已過期。 –

+0

所以基本上,如果他的時間戳不足以使他離線,我需要爲每個用戶(在db中具有「在線」狀態)運行檢查。每次有人做某事時我都必須這樣做? – crock

0

大多數在線系統都有15分鐘的檢查週期。你每次有人做某事時設置一個時間戳,然後如果他們離線,他們不會更新他們的時間戳,並簡單地比較當前時間戳和數據庫中的時間戳,如果超過15分鐘,刪除。

+0

好的,所以如果我理解正確的話...用戶1登錄(更新他的時間戳+如果過期,檢查運行所有其他人,如果他們這樣做,他們的狀態更新在分貝)。用戶2登錄...等等...? – crock

1

這很簡單。這可能在你的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

+0

聽起來很棒:)謝謝。你可以幫我用「打開crontab」位嗎?如果涉及到cron,我完全是noob。我如何打開crontab? – crock

+0

從'$'鍵入'crontab -e'並按下輸入 – cwallenpoole

+0

謝謝cwallenpoole。這太棒了:) – crock

相關問題