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 минут" и ставишь им флаг что они выбыли из онлайна.
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 и гугл. Просто интервал разный.
Не очень, сколько это будет одновременных пустых запросов... К тому же у меня в вкладках сейчас 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 запроса, вместо одного. Это неправильно. Вместо галочки - сразу в кеш кидай, будет эффект лучше.
Быстрее с индексами, при этом ты перед этим будешь всё равно дату дёргать и пересчитывать(!!!), итого 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мин кроном проверять.
Нити нет, юзера нет.
И думаю, без базы на файлах будет быстрее чем постоянно базу тормошить и крон запускать.
Но это всё для типа чата хорошо а так конечно с интервалом 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] всем же и преобразуется.
<?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 написал(а):
Есть идеи?

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