Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

как сделать провеку "кто онлайн"

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> как сделать провеку "кто онлайн"
Имя
Сообщение << Старые топики   Новые топики >>
как сделать провеку "кто онлайн" - 2008-08-16 12:25:47.106666   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
пишу щас скрипт статистики…
надо написать модульчик.. как можно проще с проверкой кто онлайн по последним действиям… как это сделать? хотябы принцип опишите. можно на примере кода
Post #: 1
RE: как сделать провеку "кто онлайн" - 2008-08-16 12:35:39.160000   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
При любом действии пользователя выполнять запрос вида:
UPDATE `users` SET `lastvisit`=NOW() WHERE `id`=1

Потом делать выборки из базы, кто был за последние 10 минут.
Post #: 2
RE: как сделать провеку "кто онлайн" - 2008-08-16 13:24:28.193333   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
а если записывать действия пользователей в отдельную таблицу с временем.. и её сортировать все запросы которым больше 5 минут будут удаляться …
таким образом время выборки сократится (то ли всех юзеров проверять на время то ли только кусочек базы)
есть ли смысл в этом?
Post #: 3
RE: как сделать провеку "кто онлайн" - 2008-08-16 13:30:35.756666   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
ну и естественно старые строки сразу удалять
Post #: 4
RE: как сделать провеку "кто онлайн" - 2008-08-16 13:34:29.306666   
}{roft

Сообщений: 159
Оценки: 0
Присоединился: 2007-11-08 17:18:30.900000
quote:

а если записывать действия пользователей в отдельную таблицу с временем.. и её сортировать все запросы которым больше 5 минут будут удаляться …
таким образом время выборки сократится (то ли всех юзеров проверять на время то ли только кусочек базы)
есть ли смысл в этом?

Мда…Что сортировать для чего…Ты вообще знаком с SQL…Тебе орб сказал делать выборку кого не было 10 минут - это делается одним запросом без всякой сортировки…
Post #: 5
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:08:42.333333   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
вообщето мне надо сортировка не только кто щас онлайн а и кто онлайн в данном разделе
Post #: 6
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:14:54.876666   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
и ещё вопрос
можно ли сделать выборку тех чьё время отличается от текущего не больше чем на 5 минут только одним SQL запросом не подключая к этому пхп?
ну чтото типо SELECT * FROM users WHERE lastvisit <= NOW() - 5 минут
вот как мне описать это NOW() - 5 минут
если у меня тип данной ячейки стоит datetime
есть ли вариант перевусти его в секунды и сранвивать разницу в секундах?
Post #: 7
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:18:01.490000   
}{roft

Сообщений: 159
Оценки: 0
Присоединился: 2007-11-08 17:18:30.900000
quote:

вообщето мне надо сортировка не только кто щас онлайн а и кто онлайн в данном разделе

Ну…задаешь в блоке WHERE просто дополнительные условия, например: cat_id='$this_cat_id'…
quote:

и ещё вопрос
можно ли сделать выборку тех чьё время отличается от текущего не больше чем на 5 минут только одним SQL запросом не подключая к этому пхп?
ну чтото типо SELECT * FROM users WHERE lastvisit &lt;= NOW() - 5 минут
вот как мне описать это NOW() - 5 минут
если у меня тип данной ячейки стоит datetime
есть ли вариант перевусти его в секунды и сранвивать разницу в секундах?

А ты поставь в полях не datetime, а в милисекундах…Када надо переводишь 5 мин в милисекунды и отнимаешь…
Post #: 8
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:22:25.873333   
}{roft

Сообщений: 159
Оценки: 0
Присоединился: 2007-11-08 17:18:30.900000
quote:

и ещё вопрос
можно ли сделать выборку тех чьё время отличается от текущего не больше чем на 5 минут только одним SQL запросом не подключая к этому пхп?
ну чтото типо SELECT * FROM users WHERE lastvisit &lt;= NOW() - 5 минут
вот как мне описать это NOW() - 5 минут
если у меня тип данной ячейки стоит datetime
есть ли вариант перевусти его в секунды и сранвивать разницу в секундах?

А ты поставь в полях не datetime, а в милисекундах…Када надо переводишь 5 мин в милисекунды и отнимаешь…
Post #: 9
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:25:34.526666   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
хм.. а какой это тип поля? никогда просто не пользовался
Post #: 10
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:41:10.440000   
}{roft

Сообщений: 159
Оценки: 0
Присоединился: 2007-11-08 17:18:30.900000
Тип поля: TIMESTAMP.
Post #: 11
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:50:36.096666   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
ну я про этот тип читал…. но помоиму он служит для отметки время и сохраняет время в формате
TIMESTAMP(14) YYYYMMDDHHMMSS
Post #: 12
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:54:48.100000   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
ну вот поставил я тип ячейки таймстамп
время в ней в формате
2008-08-16 13:52:31
Post #: 13
RE: как сделать провеку "кто онлайн" - 2008-08-16 15:09:02.103333   
}{roft

Сообщений: 159
Оценки: 0
Присоединился: 2007-11-08 17:18:30.900000
quote:

ну я про этот тип читал…. но помоиму он служит для отметки время и сохраняет время в формате
TIMESTAMP(14) YYYYMMDDHHMMSS

Я бы тебе все объяснил, расписал и скрипт бы дал…Я щас сильно занят…Поэтому отвечаю очень быстро и невнятно…
Давай так… чтобы не быть голословными..Ты загуглишь, найдешь типы данных и точно все посмотришь… Вечерком если тебе тут все не разжуют, напишешь в личку я тебе объясню…
Post #: 14
RE: как сделать провеку "кто онлайн" - 2008-08-16 16:27:22.916666   
_hel_

Сообщений: 103
Оценки: 0
Присоединился: 2008-07-09 16:00:40.600000
Мне кажется что легче не timestamp использовать, а отметку времени функцией microtime( 1 ); для этого просто создаёшь поле в SQL типа int, и записываешь туда эту отметку. Затем в скрипте снова вызываешь microtime( 1 );, и смотришь различие между ним и старым временем (которое в базе). "новое - старое = разница", если разница больше 300 секунд допустим - значит юзер уже в офлайне. Если меньше 300 секунд, то еще в онлайне, значит выводим его в модуле "кто онлайн".
Не проверял на практике, если честно.
Post #: 15
RE: как сделать провеку "кто онлайн" - 2008-08-16 23:56:30.133333   
AdReNaL1Ne

Сообщений: 8027
Оценки: 350
Присоединился: 2005-09-11 06:38:05
Вспомнился очень грамотный совет по этому вопросу, читаем:

http://forum.xakep.ru/fb.aspx?m=763823 (Post #2)
Post #: 16
RE: как сделать провеку "кто онлайн" - 2008-08-17 15:05:59.226666   
Fr3d

Сообщений: 93
Оценки: 0
Присоединился: 2008-05-25 16:56:34.846666
хз, я всегда этот скрипт юзаю :)

quote:

&lt;?
$timelim=20; ///лимит времени в секундах допустимого бездействия пользоваеля
session_id("hfJKcbJssJ");
session_start();
$f=1;
if(!isset($_SESSION['kolvo']))
&nbsp;&nbsp;&nbsp; $_SESSION['kolvo']=0;
if($_SESSION['kolvo']&gt;0)
{
&nbsp; for($i=0;$i&lt;$_SESSION['kolvo'];$i++)
&nbsp;&nbsp;&nbsp; if($_SESSION['users']['ip'][$i]==$_SERVER['REMOTE_ADDR'])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $_SESSION['users']['date'][$i]=date('U');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $f=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

if($_SESSION['kolvo']&gt;0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
for($i=0;$i&lt;$_SESSION['kolvo'];$i++)
&nbsp;&nbsp; if(date('U')-$_SESSION['users']['date'][$i]&gt;$timelim)
&nbsp;&nbsp; { for($j=$i;$j&lt;$_SESSION['kolvo']-1;$j++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $_SESSION['users']['date'][$j]=$_SESSION['users']['date'][$j+1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $_SESSION['users']['ip'][$j]=$_SESSION['users']['ip'][$j+1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; $_SESSION['kolvo']–;
&nbsp;&nbsp;&nbsp; }
}
if($f)
{
&nbsp; $_SESSION['users']['ip'][$_SESSION['kolvo']]=$_SERVER['REMOTE_ADDR'];
&nbsp; $_SESSION['users']['date'][$_SESSION['kolvo']]=date('U');
&nbsp; $_SESSION['kolvo']++;
}
echo "Рыл на странице: ".$_SESSION['kolvo'];
?&gt;

писал не я, за красоту кода не отвечаю. ))))
Post #: 17
RE: как сделать провеку "кто онлайн" - 2008-08-17 15:17:37.746666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
этот скрипт, скажем так, ужасен. Общая сессия - нечто)
Post #: 18
Страниц:  [1]
Все форумы >> [Веб-программинг] >> как сделать провеку "кто онлайн"







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.