2012-01-12 16 views
0

所以我正在寫類似於聊天應用程序的東西,並且需要一種方式來檢測用戶何時不再活動。基本上我需要讓該應用的其他用戶知道,如果用戶X離開了該頁面或關閉了瀏覽器,則該用戶X已註銷。對於服務器端腳本來說,除了「我在15分鐘內沒有收到用戶X的請求,所以我認爲他已經出去了嗎?」的任何方法。如何檢測PHP中的聊天腳本的非活動會話?

+0

邏輯在這裏:http://stackoverflow.com/questions/8806876/1-1-chat-system-using-php-mysql/8807233#8807233 – 2012-01-12 22:14:18

+0

參考這篇文章:http://stackoverflow.com/questions/887919 /如何檢測,如果用戶註銷在php – 2012-01-12 22:16:05

回答

0

正如他們在你需要使用AJAX的評論的鏈接說。要做到這一點(在我看來)最簡單的方法是使用jQuery,這裏是下面一個例子:

$(document).ready(function(){ 
    window.setInterval(function(){ 
     initiateSessionCheck(); 
    5000); 

    function initiateSessionCheck() { 
     $.ajax({ 
      type : 'POST', 
      url : 'sessioncheck.php', 
      success : function(data){ 
       //success 
      }, 
      error : function(XMLHttpRequest, textStatus, errorThrown) { 
       //error do something they are no longer active 
      } 
     }); 

    } 
}); 

現在您的sessioncheck.php文件,你會想這樣做

session_start(); 

if (!$_SESSION) { //you could check a session variable explicitly like $_SESSION['user_id'] != '' 
    $return['error'] = true; 
} else { 
    $return['error'] = false; 
} 

echo json_encode($return); 

這是基本,但它應該做的伎倆!

+0

但這似乎檢查您的會話狀態 - 而不是其他人在房間裏的狀態。意思是如果你和我在說話,我離開,我的會話將關閉,但你怎麼會意識到這一點?服務器如何知道會話正在關閉?在PHP不同意我和你之間的會話 – 2012-01-13 03:23:39

+0

等待我想我得到它 - 這有點保活..我每次的ping到sessionchec的,我會寫信給DB說:「用戶X ping通的‘時間戳’」。 。然後活躍用戶的列表將由他們的最後ping決定......對吧? – 2012-01-13 03:25:30

+0

好吧,您可以使用相同的函數每隔x秒向特定的表寫入一個日期和時間。然後設置一個cron來檢查同一個表,如果日期時間戳已經過了x時間,那麼你可以假設用戶已經離開了,並且沒有活動的會話(他們將不得不離開頁面來殺死ajax調用)。如果會話結束,那麼您可以寫入用戶表中名爲active_session的列(例如),並將其設置爲0(如果它們不是活動的) - 確保它們在登錄時設置爲1。然後在同樣的ajax調用其他用戶也寫日期時間戳記,您 – 2012-01-13 03:40:54