cybermad Опубликовано 30 Марта 2009 Жалоба Поделиться Опубликовано 30 Марта 2009 (изменено) Есть код:$prefix = "ibf_"; $q=0; $DB->query("SELECT id, members_display_name AS name, last_activity, ip_address FROM ".$prefix."members WHERE id <> 0 AND last_activity > UNIX_TIMESTAMP(DATE_FORMAT(SYSDATE(), '%Y-%c-%d 00:00:00')) ORDER BY last_activity DESC"); while( $row = $DB->fetch_row() ) { $idu = $row['id']; $last = date('G:i', $row['last_activity']); $q++; $content.= " <tr> <td class=\"tdblock\" width=\"80%\"> $q. <a href=\"$mkportals->forum_url/index.php?showuser=$idu\" onmouseover=\"ajax_showTooltip('index.php?ind=ajax&act=avatar&uid=$idu',this);return false;\" onmouseout=\"ajax_hideTooltip();\">{$row['name']}</a> </td> <td class=\"tdblock\" width=\"20%\" align=\"left\">$last</td> </tr> "; } unset($row); unset($idu); с помощью данного кода выводим в две колонки тех кто посетил форум с ником и временем посещения (код из блока для CMS MKPortal). Подскажите, пожалуйста, каким образом (запросом) можно определить, кто из пользователей в данном списке находится онлайн? Изменено 30 Марта 2009 пользователем cybermad Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 30 Марта 2009 Жалоба Поделиться Опубликовано 30 Марта 2009 Канонический вариант: $row['last_activity'] > time() - $this->ipsclass->vars['au_cutoff']*60 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
cybermad Опубликовано 30 Марта 2009 Автор Жалоба Поделиться Опубликовано 30 Марта 2009 (изменено) Ясно, а как правило, чему равно значение: $this->ipsclass->vars['au_cutoff']*60. Основываясь на коде: <setting> <conf_id>27</conf_id> <conf_title><![CDATA[Период отсутствия активности пользователя (в минутах)]]></conf_title> <conf_description></conf_description> <conf_group>7</conf_group> <conf_type>input</conf_type> <conf_key>au_cutoff</conf_key> <conf_value></conf_value> <conf_default>15</conf_default> <conf_extra></conf_extra> <conf_evalphp></conf_evalphp> <conf_protected>1</conf_protected> <conf_position>30</conf_position> <conf_start_group></conf_start_group> <conf_end_group>0</conf_end_group> <conf_add_cache>1</conf_add_cache> <conf_title_keyword>cpusaving</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> должно быть 900. Это верно? Т.е. при отсутствии активности пользователя в течение 15 мин. на форуме считается что он не активен? Как быть тогда с проблемой того, что пользователь находится неактивным на форуме более 15 минут но не разлогинивается, а мы считаем его уже отключившимся.... проблема номер два - пользователь разлогинился на форуме, но мы еще 15 минут видим его в списке активных... P.S. Может как-то привязаться к ibf_sessions??? Изменено 30 Марта 2009 пользователем cybermad Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 30 Марта 2009 Жалоба Поделиться Опубликовано 30 Марта 2009 должно быть 900. Это верно?Верно. Как быть тогда с проблемой того, что пользователь находится неактивным на форуме более 15 минут но не разлогинивается, а мы считаем его уже отключившимсяЕсли пользователь открыл страницу и не уходя с неё читает её час, то никакими разумными методами мы об этом не узнаем. Равно как и если он её читал 5 секунд и закрыл браузер. проблема номер два - пользователь разлогинился на форуме, но мы еще 15 минут видим его в списке активныхМожет как-то привязаться к ibf_sessions???Да. Смотрите запрос как на главной в ./sources/lib/func_boardstats.php Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 30 Марта 2009 Жалоба Поделиться Опубликовано 30 Марта 2009 пользователь находится неактивным на форуме более 15 минут но не разлогинивается, а мы считаем его уже отключившимся...Гугл-аналитикс и подобные счетчики тоже посчитают новым хостом (посещением) того же юника, если активности не было больше 15 минут.А если я на ночь забыл закрыть браузер и выключить ноут, а сам спать пошел - это с какого переляку считать активностью?Активный пользователь - это листающий страницы... пользователь разлогинился на форуме, но мы еще 15 минут видим его в списке активных... P.S. Может как-то привязаться к ibf_sessions???Привязка к ibf_sessions ничего не даст.Насколько я помню, при разлогинивании не происходит удаления строки из таблицы сессий. Очистка происходит, насколько я помню, в функции create_member_session() - т.е. при залогинивании - и удаляеются строки по тому же критерию неактивности свыше заданного времени. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 30 Марта 2009 Жалоба Поделиться Опубликовано 30 Марта 2009 Привязка к ibf_sessions ничего не даст.Насколько я помню, при разлогинивании не происходит удаления строки из таблицы сессий. Очистка происходит, насколько я помню, в функции create_member_session() - т.е. при залогинивании - и удаляеются строки по тому же критерию неактивности свыше заданного времени.2.3.5: $this->ipsclass->DB->simple_construct( array( 'update' => 'sessions', 'set' => "member_name='',member_id='0',login_type='0',member_group={$this->ipsclass->vars['guest_group']}", 'where' => "id='". $this->ipsclass->sess->session_id ."'" ) );Из-за login_type='0' на главной пользователь исчезнет Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 31 Марта 2009 Жалоба Поделиться Опубликовано 31 Марта 2009 Мои извинения.Заглянул в код, действительно, и в "однушке" при разлогинивании пользователя есть запрос: $DB->query("UPDATE ibf_sessions SET ". "member_name='',". "member_id='0',". "login_type='0' ". "WHERE id='". $sess->session_id ."'"); Склероз меня подвел... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 31 Марта 2009 Жалоба Поделиться Опубликовано 31 Марта 2009 У меня тоже бывает такое недоверие в Мэтту Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
cybermad Опубликовано 31 Марта 2009 Автор Жалоба Поделиться Опубликовано 31 Марта 2009 (изменено) Модераторам: удалите, пожалуйста этот пост, как потерявший актуальность. Изменено 1 Апреля 2009 пользователем cybermad Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
cybermad Опубликовано 1 Апреля 2009 Автор Жалоба Поделиться Опубликовано 1 Апреля 2009 (изменено) Сделал так:$prefix = "ibf_"; $lonlinelist= $mklib_board->forum_link("onlinelist"); $q=0; $time = (time() - 900); $DB->query("SELECT m.id, m.members_display_name AS name, m.last_activity, m.ip_address, s.member_id, s.running_time, s.member_group, g.suffix, g.prefix FROM ".$prefix."members m LEFT JOIN ".$prefix."sessions s ON (s.member_id= m.id) LEFT JOIN ibf_groups g ON (g.g_id=s.member_group) WHERE m.id <> 0 AND last_activity > UNIX_TIMESTAMP(DATE_FORMAT(SYSDATE(), '%Y-%c-%d 00:00:00')) ORDER BY last_activity DESC"); while( $row = $DB->fetch_row() ) { $idu = $row['id']; $last = date('G:i', $row['last_activity']); $q++; if ( ($row['member_id'] == $row['id']) and ($row['running_time'] > $time)) { $uonline = "{$row['prefix']}{$row['name']}{$row['suffix']}"; $imgonline = "<img src=\"$mklib->images/online.png\" border=\"0\" alt=\"[online]\" />"; } else { $uonline = $row['name']; $imgonline =""; } если пользователь разлогинивается - срабатывает, если пользователь не активен более 15 минут тоже срабатывает. Также выводится стиль отображения группы для пользователя (подсветка светом). Демо работы блока можно посмотреть здесь (слева второй блок) Изменено 1 Апреля 2009 пользователем cybermad Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.