[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Статус онлайн пользователя
sergei1094
Всем доброго времени суток.Сижу ломаю голову над скриптом "Статус ОНЛАЙ / ОФФЛАЙН" пользователя "Имя юзера -> [ON]".Пробовал написать не большой,но почему то не получаеться.Юзер у меня постоянно в онлайне,помогите если не трудно....вот что я накалякал:

session_start();
$user_id = $_SESSION['id'];
$_SESSION['ONLINE'] = strtotime('+30 sec');
$online = $_SESSION['ONLINE'];

if($user_id != "")
{

$sql = mysql_query("UPDATE `rega` SET `onlinetime`='$online' WHERE `id`='$user_id'");

$query = "SELECT onlinetime FROM `rega` WHERE `id`='$user_id'";
$res = mysql_query($query);
$row = mysql_fetch_array($res);

$time = $row['onlinetime'] = strtotime('+60 sec');
$online_u = $_SESSION['ONLINE'];

if($online_u > $time)
{
$status = '<font color="red">[OFF]</font>';
} else {
$status = '<font color="#80FF80">[ON]</font>';
echo '<br />' .$online_u.' '.$time;
}


}





Спустя 1 час, 38 минут, 27 секунд (30.04.2012 - 08:59) vagrand написал(а):
Алгоритм примерно таков:
1. При каждом вызове страницы сайта ты в поле в таблице юзера записываешь текущее время;
2. Cron скриптом раз в N минут (в зависимости от нужной точности) ты проверяешь у каких юзеров значение этого поля меньше скажем "текущее время - 10 минут" и ставишь им флаг что они выбыли из онлайна.

Спустя 3 часа, 1 минута, 9 секунд (30.04.2012 - 12:01) sebastjan написал(а):
Ни разу не задумывался , но интересно.
А если обойтись без Крона, типа яваскрипт у клиента через какой то интервал будет посылать на сервер некий флаг к примеру куки, по которому в базе будет отмечаться наличие пользователя.
Куки на короткий промежуток времени.

Если юзер ушол куки устарели и сессия сдохла сервер чистит ячейку в таблице и другие не видят
наличие пользователя.
Это поле в таблице будет читаться всеми кто на сайте.
Но это всё надо с технологией передачи данныз без перезагрузки страницы, типа яваквери в идеале серверный яваскрипт, чтоб постоянно было взаимодействие с страницей.
Может и ахенею несу, не знаю, только так алгоритм представляю.



Спустя 2 часа, 45 минут, 26 секунд (30.04.2012 - 14:46) inpost написал(а):
sebastjan
Не очень, сколько это будет одновременных пустых запросов... К тому же у меня в вкладках сейчас 70 страниц, это не значит, что я на них в он-лайн.

vagrand
Зачем галочки дёргать? Просто записываешь время последнего ОН-лайн. А когда считаешь, то через COUNT. Кроном, разве что, надо делать кеш результата подсчёта, чтобы по 100 раз не дёргать каждую минуту, а один раз посчитать на ближайшие 10-15 минут. Так, по крайней мере, работает liveinternet и гугл. Просто интервал разный.

Спустя 2 часа, 32 минуты, 27 секунд (30.04.2012 - 17:18) vagrand написал(а):
Цитата
Зачем галочки дёргать?


Галочки затем что бы потом можно было быстро отобрать список юзеров в онлайн или не в онлайн. ПО полу скажем tinyint с ключом будет намного быстрее чем по дате.

Спустя 45 минут, 39 секунд (30.04.2012 - 18:04) inpost написал(а):
vagrand
Быстрее с индексами, при этом ты перед этим будешь всё равно дату дёргать и пересчитывать(!!!), итого 2 запроса, вместо одного. Это неправильно. Вместо галочки - сразу в кеш кидай, будет эффект лучше.

Спустя 34 минуты, 48 секунд (30.04.2012 - 18:39) vagrand написал(а):
Дату я буду дергать один раз в N минут, а запросы на поиск юзеров могут быть очень частыми. И в кеш тут сразу закинуть может не получится, если юзер например ищет своих онлайн френдов. Ты же в крон скрипте не будешь для каждого юзера создавать кеш его френдов?

Спустя 29 минут, 38 секунд (30.04.2012 - 19:08) inpost написал(а):
vagrand
Я бы это назвал случаем, а не правилом.

Спустя 11 минут, 15 секунд (30.04.2012 - 19:20) vagrand написал(а):
inpost
Ну мы то не знаем исходных данных. Я написал как бы сделал я, не претендую на истину в последней инстанции.

Спустя 1 час, 25 минут, 56 секунд (30.04.2012 - 20:46) inpost написал(а):
vagrand
Вообщем, на каждый случай своё решение.

Спустя 33 минуты (30.04.2012 - 21:19) sebastjan написал(а):
А я думаю что для онлайна контроля самое то серверный яваскрипт, будет держать нить с клиентом.
Нити нет, юзера нет.
И думаю, без базы на файлах будет быстрее чем постоянно базу тормошить и крон запускать.
Но это всё для типа чата хорошо а так конечно с интервалом 10мин кроном проверять.


Спустя 22 часа, 6 минут, 31 секунда (1.05.2012 - 19:25) sergei1094 написал(а):
Ребят,по моему Вы не много отвлеклись)) Скрипт мой,я думаю что рабочий,проблемка не много в другом.У меня идёт гостевая,в этой гостевой писали какие-либо пользователи,как мне присвоить переменную $status для каждого из них,если сообщения выводяться циклом do while через PRINTF?

Спустя 10 часов, 10 минут, 47 секунд (2.05.2012 - 05:36) sergei1094 написал(а):
А может просто есть у кого линк на хорошую статью,где можно почитать,а то блин...голова вроде делает правильно,но всё-равно где то ошибается.Я думаю что в цикле...

Спустя 6 часов, 17 минут, 31 секунда (2.05.2012 - 11:53) sergei1094 написал(а):
Ребят,помогите пожалуйста

Спустя 45 минут, 13 секунд (2.05.2012 - 12:39) vagrand написал(а):
Я вам расписал подробны алгоритм как это можно сделать. Чем еще мы можем вам помочь?

Спустя 3 часа, 40 минут, 42 секунды (2.05.2012 - 16:19) sergei1094 написал(а):
Цитата (vagrand @ 2.05.2012 - 10:39)
Чем еще мы можем вам помочь?


Алгоритм я знаю,у меня он уже написан давно,у меня проблема в том что,когда я вывожу сообщения юзеров на странице,переменная $status точнее {ON} выводиться всем юзерам одинаково.Как присвоить эту переменную каждому юзеру отдельно? Результат текущего времени у меня храниться в базе данных,и результат последней активности юзера я сравниваю с текущим,как теперь правильно в цикле прописать всё это?

Спустя 5 часов, 15 минут, 6 секунд (2.05.2012 - 21:35) sergei1094 написал(а):
Если у меня статус пользователя храниться в переменной статус,то я прописываю вот так:
<?php
do {

printf ("Пользователь: %s %s",$res['name'],$status);

} while ($res = mysql_fetch_array($sql));
?>

Или нужно вот так?
<?php
do {

printf ("Пользователь: %s $status",$res['name']);

} while ($res = mysql_fetch_array($sql));
?>

Или же как то по другому? Просто если у меня переменная допустим с самого начала в плюсе (т.е. [ON]),то при выводе через цикл,этот статус [ON] всем же и преобразуется.

Спустя 21 час, 23 минуты, 1 секунда (3.05.2012 - 18:58) sergei1094 написал(а):
Есть идеи? unsure.gif

Спустя 1 день, 12 минут, 14 секунд (4.05.2012 - 19:10) sergei1094 написал(а):
Не ужели ни кто не писал такой скрипт? Помогите с циклом пожалуйста
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.