2012-05-15 29 views
1

我程序聊天室,但無法找到顯示在線和離線用戶的方式。 我使用會話進行在線用戶。當用戶登錄頁面而不是空的會話更新數據庫和聯機1。 現在怎麼知道用戶從聊天或關閉瀏覽器註銷。我知道whith會話時間或捕獲可以做到這一點,但我不能寫適合的代碼。任何人都可以幫助我,並在這裏完整的代碼 感謝答案顯示聊天室邊欄中的在線用戶

作秀在線:

session_start(); 
include("config.php"); 
connect(); 
$sql="SELECT `username` FROM `user` WHERE `online`=1"; 
$result=mysql_query($sql) or die (mysql_error()); 
if(mysql_num_rows($result)>0) 
{ 
for ($i=0;$i<mysql_num_rows($result);$i++) 
{ 
echo ('<b style="color:green;margin-left:10px;margin-top:10px;">'.mysql_result($result,$i,0).'</b><br>'); 
if($_SESSION['user']!="" 
} 
+0

哪些是您使用實時通信技術? Websockets或ajax longpolling或不同的東西? – Christoph

+0

我用阿賈克斯尋找在線用戶和聊天 –

回答

0

你可以把簡單的「如果」操作,以檢查是否有會話時間比實時最短。

示例。

在數據庫中使用戶列中的last_activity。當用戶發送消息進行查詢以更新該列時,使用time()最後一個活動;

只要檢查數據庫中的last_activity是否超過timeout,在這種情況下,您可以設置$ timeout變量用於超時。 這裏是代碼:

<?php # make while loop from users where online = 1 
$last_activity_from_database = $row['last_activity']; 
$timeout      = time()-600; # 10 minutes 
if($last_activity_from_database < $timeout){ 
    mysql_query("UPDATE users SET online='0'"); 
} 
?> 

您應該進行AJAX調用。

+0

謝謝,但我怎麼可以更新最後的活動? –

+0

當用戶發送消息或創建js函數,檢查的每分鐘,最後一次活動.. – harisdev

+0

也許用戶只能看到聊天室,不發送消息。我如何爲這種情況創建js函數? –

1

您可以使用php腳本按計劃運行,當用戶不在現場時,更新狀態將會更新爲脫機狀態。

爲此,有時候應該通過ajax將用戶狀態發送到服務器,並將其存儲在數據庫中。

更新..

JS,用於發送狀態jQuery函數到PHP每500ms。

function upd_status() { 
    $.get('/php.php', function(data) { 
     setTimeout(upd_status,500); 
    }); 
} 
upd_status(); 

在php方面。

// I do not know where is user id, but it should be in session 
$uid = $_SESSION['user']['uid']; 
settype($uid, 'int'); 

$sql = "UPDATE user SET status = 1, timestamp = ". time() ." WHERE id = ". $uid ."; 

上的cron腳本

$sql = "UPDATE user SET status = 0 WHERE timestamp < ". (time()-60*5); 
+0

謝謝你能爲我舉個例子嗎? –

+0

即使通過mysql_query()沒有額外的檢查,它也能工作,但我建議在cron腳本上使用PDO – ShaaD

+0

?而1000個在線用戶的聊天室500毫秒可以壓力服務器? –