2010-09-13 45 views
2

我發展我的應用程序中的聊天模塊...如何從當屆不要存在數據庫中刪除數據 - PHP

1)我打開了用戶聊天的窗口,是有辦法,當用戶關閉聊天窗口,我可以更新該記錄的狀態...我的意思是關閉瀏覽器的事件?

2)我知道默認會話時間爲24分鐘, ,所以在24分鐘不活動後,用戶將被踢出網站,並被要求再次登錄。

如何刪除/在我的數據庫刷新數據,當用戶有24mins)沒有任何活動(當用戶從​​會話註銷因不活動)

回答

1

1你需要爲這個JavaScript的onunload事件一。它會發送一個異步查詢到您的網絡服務器,設置用戶的離線狀態。但是,您不應該僅僅依靠此事件並設置24分鐘自動脫機超時時間,因爲不能保證用戶正在使用JavaScript。

2)我認爲你最好的選擇是運行一個cron作業(每隔30分鐘左右?)查詢你的數據庫,確定最後一次活動超過24分鐘前的用戶,然後刪除相關數據。

+0

有我的服務器上的任何影響,如果我在每30分鐘的cron作業......我的意思是我聽說的服務器將是緩慢的,在cron作業的時間,這是真的 – 2010-09-13 07:22:53

+0

而且我怎麼能從數據庫用戶表中知道,其活動超過24分鐘...我應該存儲不活動時間還是wht? – 2010-09-13 07:28:32

+0

那麼,每30分鐘運行一次cronjob肯定比在每個頁面加載時檢查它要好。根據數據庫的大小,這30分鐘的解析可能會減慢服務器的速度。你真的需要每24分鐘刪除一次數據嗎?如果沒有,例如每天凌晨2點可以設置一個cronjob,以儘量減少緩慢 – AlexJF 2010-09-13 07:34:34

1

將每個聊天條目的時間戳存儲在UNIX_TIMESTAMP中。當一個新的聊天記錄傳入檢查時間戳比現在小的每個條目時間戳 - 24分鐘。踢用戶。

1

1)使用卸載事件

2)如果你正在開發一個聊天,我猜你有一個調用服務器不斷地獲取消息的周期函數。每次調用此功能時,即使用戶未發送消息,不活動時間也會重置。如果你想在24分鐘內沒有寫任何東西的時候註銷用戶,你不能依賴於php會話。

你可以做的是:保存在數據庫中,用戶最後一次在聊天中寫信息,並且每次使用定期功能時,驗證用戶是否在過去的24分鐘內沒有寫任何東西

-1

使用JavaScript函數事件
window.onbeforeunload = myLogoutFunction;

注意:此JavaScript不適用於瀏覽器崩潰。

有一個user_log數據庫表,並在其中填寫登錄和「註銷」日期。 當用戶沒有更新註銷日期時,則可以認爲他的連接有問題。

$where = " AND `users_id`='".$response['userfound']['id']."'"; 
$where .= " AND `logoffdatetime`='0000-00-00 00:00:00'"; 

經過24分鐘php會話消失(默認php.ini設置)。它不會太可用。但是你仍然可以保存到user_log表中。

您不應該需要flush數據庫。 通過數據庫保持聊天用戶活着是不好的主意。請使用帶有時間戳的小文件。

這裏其他一些有用的提示 檢測用戶是否回來沒有註銷

$user_navigates = false; 
if(isset($_SERVER['HTTP_REFERER']) && basename($_SERVER['HTTP_REFERER']) != _PAGE) 
$user_navigates = true; 

還保存頁面刷新到會議

if(isset($_GET['pagerefreshed'])) 
$_SESSION['pagerefreshed'] = $_GET['pagerefreshed']; 

USER_ID保存記錄伸到會議,所以你可以使用它恢復的東西。例如不需要重新加載頁面。

$_SESSION['loggedout']['user_id'] == $login->user_id 
相關問題