我目前正在研究一個聊天系統,僅僅是作爲一名程序員改善自己的一種手段,因爲我還年輕(17)。當用戶登錄時,消息「{user}已進入聊天。」在聊天中顯示。同樣,當用戶註銷時,消息「{user}已離開聊天。」顯示。如何確定用戶何時正式離開或進入一個頁面
這兩個功能按原樣正常工作。但是,我還想確定用戶什麼時候關閉了頁面(留言)和何時回來(輸入留言)。
爲了在一定程度上做到這一點,我做了以下內容:
1,在主聊天頁面(chat.php),我設置了一個名爲onpage
2會話,當用戶離開頁面,下面的腳本將在onbeforeunload
事件通過AJAX(jQuery的)運行:
//setoffline.php
unset($_SESSION["onpage"]); // unset the session
if ($_POST['logout'] == "false") { // in our case, this will evaluate true
sleep(3); // halt the script for 3 seconds
if (isset($_SESSION["onpage"]) || !empty($_SESSION["onpage"]))
die();
}
}
// if continued, send the offline message
...
$_SESSION["left"] = "true";
3,運行該腳本,然後檢查是否會仍然存在(若用戶提供三種內返回之前睡三秒鐘秒會話將被重置)。如果不是,則腳本將完成,發送留言信息,並設置會話left
。
4,當用戶返回時,會觸發一個onload函數來檢查會話left
。如果已設置,則會發送輸入消息,會話left
將被取消設置。
的問題:
到現在爲止,我相信你已經確定了一個問題,我的算法。我自己也看到很多問題。例如,使用sleep
函數看起來不正確,也不能正常工作。它在關閉頁面時正常工作(因爲沒有人在3秒內返回),但是當你刷新時,它會導致頁面暫停三秒鐘,我不想要。我只想要一種方法來識別用戶何時正式離開並共軛返回到頁面。
您是否知道每個用戶都有自己的會話? – delueg
這不是問題。如果用戶關閉該頁面,每個用戶都有自己的會話幫助的事實將如何通知我用戶已經離開聊天? @delueg – Shawn31313
當新的聊天消息進入時,你如何更新瀏覽器?某種投票?也許輪詢數據也可能返回登錄到聊天的用戶列表。然後你可以查看哪些人已經離開了聊天。 (使用onbeforeunload發送命令以將用戶註銷或將其標記爲已離開聊天)。 –