как сделать провеку "кто онлайн"
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
как сделать провеку "кто онлайн" - 2008-08-16 12:25:47.106666
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
пишу щас скрипт статистики… надо написать модульчик.. как можно проще с проверкой кто онлайн по последним действиям… как это сделать? хотябы принцип опишите. можно на примере кода
|
|
|
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 минут.
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-16 13:24:28.193333
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
а если записывать действия пользователей в отдельную таблицу с временем.. и её сортировать все запросы которым больше 5 минут будут удаляться … таким образом время выборки сократится (то ли всех юзеров проверять на время то ли только кусочек базы) есть ли смысл в этом?
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-16 13:30:35.756666
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
ну и естественно старые строки сразу удалять
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-16 13:34:29.306666
|
|
|
}{roft
Сообщений: 159
Оценки: 0
Присоединился: 2007-11-08 17:18:30.900000
|
quote:
а если записывать действия пользователей в отдельную таблицу с временем.. и её сортировать все запросы которым больше 5 минут будут удаляться … таким образом время выборки сократится (то ли всех юзеров проверять на время то ли только кусочек базы) есть ли смысл в этом? Мда…Что сортировать для чего…Ты вообще знаком с SQL…Тебе орб сказал делать выборку кого не было 10 минут - это делается одним запросом без всякой сортировки…
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:08:42.333333
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
вообщето мне надо сортировка не только кто щас онлайн а и кто онлайн в данном разделе
|
|
|
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 есть ли вариант перевусти его в секунды и сранвивать разницу в секундах?
|
|
|
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 <= NOW() - 5 минут вот как мне описать это NOW() - 5 минут если у меня тип данной ячейки стоит datetime есть ли вариант перевусти его в секунды и сранвивать разницу в секундах? А ты поставь в полях не datetime, а в милисекундах…Када надо переводишь 5 мин в милисекунды и отнимаешь…
|
|
|
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 <= NOW() - 5 минут вот как мне описать это NOW() - 5 минут если у меня тип данной ячейки стоит datetime есть ли вариант перевусти его в секунды и сранвивать разницу в секундах? А ты поставь в полях не datetime, а в милисекундах…Када надо переводишь 5 мин в милисекунды и отнимаешь…
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:25:34.526666
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
хм.. а какой это тип поля? никогда просто не пользовался
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:41:10.440000
|
|
|
}{roft
Сообщений: 159
Оценки: 0
Присоединился: 2007-11-08 17:18:30.900000
|
Тип поля: TIMESTAMP.
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-16 14:50:36.096666
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
ну я про этот тип читал…. но помоиму он служит для отметки время и сохраняет время в формате TIMESTAMP(14) YYYYMMDDHHMMSS
|
|
|
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
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-16 15:09:02.103333
|
|
|
}{roft
Сообщений: 159
Оценки: 0
Присоединился: 2007-11-08 17:18:30.900000
|
quote:
ну я про этот тип читал…. но помоиму он служит для отметки время и сохраняет время в формате TIMESTAMP(14) YYYYMMDDHHMMSS Я бы тебе все объяснил, расписал и скрипт бы дал…Я щас сильно занят…Поэтому отвечаю очень быстро и невнятно… Давай так… чтобы не быть голословными..Ты загуглишь, найдешь типы данных и точно все посмотришь… Вечерком если тебе тут все не разжуют, напишешь в личку я тебе объясню…
|
|
|
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 секунд, то еще в онлайне, значит выводим его в модуле "кто онлайн". Не проверял на практике, если честно.
|
|
|
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)
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-17 15:05:59.226666
|
|
|
Fr3d
Сообщений: 93
Оценки: 0
Присоединился: 2008-05-25 16:56:34.846666
|
хз, я всегда этот скрипт юзаю :) quote:
<? $timelim=20; ///лимит времени в секундах допустимого бездействия пользоваеля session_id("hfJKcbJssJ"); session_start(); $f=1; if(!isset($_SESSION['kolvo'])) $_SESSION['kolvo']=0; if($_SESSION['kolvo']>0) { for($i=0;$i<$_SESSION['kolvo'];$i++) if($_SESSION['users']['ip'][$i]==$_SERVER['REMOTE_ADDR']) { $_SESSION['users']['date'][$i]=date('U'); $f=0; break; } if($_SESSION['kolvo']>0) for($i=0;$i<$_SESSION['kolvo'];$i++) if(date('U')-$_SESSION['users']['date'][$i]>$timelim) { for($j=$i;$j<$_SESSION['kolvo']-1;$j++) { $_SESSION['users']['date'][$j]=$_SESSION['users']['date'][$j+1]; $_SESSION['users']['ip'][$j]=$_SESSION['users']['ip'][$j+1]; } $_SESSION['kolvo']–; } } if($f) { $_SESSION['users']['ip'][$_SESSION['kolvo']]=$_SERVER['REMOTE_ADDR']; $_SESSION['users']['date'][$_SESSION['kolvo']]=date('U'); $_SESSION['kolvo']++; } echo "Рыл на странице: ".$_SESSION['kolvo']; ?> писал не я, за красоту кода не отвечаю. ))))
|
|
|
RE: как сделать провеку "кто онлайн" - 2008-08-17 15:17:37.746666
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
этот скрипт, скажем так, ужасен. Общая сессия - нечто)
|
|
|
|
|