2012-05-15 2 views
1

i program chatroom, но не могу найти способ для показа онлайн и офлайн-пользователей. Я использовал сеанс для онлайн-пользователя. когда пользовательская страница входа в систему, а не пустая база обновлений сеанса и онлайн 1. теперь узнайте, как выйти из чата или закрыть браузер. я знаю, что время сессии или уловка может это сделать, но я не могу написать подходящий код. любой может мне помочь и поставить полный код здесь? спасибо за ответпоказать онлайн-пользователя в боковой панели чата

для шоу онлайн:

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

Я использовал ajax для поиска онлайн-пользователя и чата –

ответ

0

Вы можете поставить простую «если» операцию, чтобы проверить, если есть время сеанса кратчайшее, чем в реальное время.

пример.

В базе данных сделать столбец last_activity у пользователей. Когда пользователь отправляет сообщение, сделайте запрос, чтобы обновить этот столбец, последнее действие с помощью time();

И просто проверьте, есть ли last_activity из базы данных, кратчайший, чем таймаут, в этом случае вы можете установить переменную $ 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 каждый 500мс.

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 ."; 

на хрон сценария

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

благодарю вас за пример? –

+0

он будет работать даже через mysql_query() без дополнительных проверок, но я рекомендую использовать PDO – ShaaD

+0

на cron-скрипте ??? и 500 мс для чата, где 1000 онлайн-пользователей могут быть сервером Presure? –

Смежные вопросы