|
Правила •
Регистрация •
Справка Сообщения за день • Поиск |
|
|
|
Опции темы | Опции просмотра |
Младший участник
|
1-й день запустил движок 1.6.2, сразу возникли проблемы.
Периодически смотрю ситуацию не разлогиниваясь. Проблема 1: количество гостей на сайте медленно растет, например сейчас: #31: Гости #1: Пользователи (пользователь это я) 31 гость это явный перебор - по моим представлениям, их должно быть не больше 1-2. Нажимаю ссылку "дальше..." чтобы посмотреть подробный список посетителей - он сначала показывает все 32 разных ip, потом после этого в течение пары минут что-то сбрасывается и остается реальный список - 1 гость и 1 пользователь. Другая сторона видимо той же проблемы: зашел тестовым пользователем с другого браузера - он появился в списке "Кто на сайте". Когда вышел, из списка он тоже сразу исчез, а вот когда я зашел повторно и просто закрыл браузер - пользователь висел в списке онлайн еще несколько часов, опять же, пока не стал возиться с окошком "дальше...". По-видимому в счетчике что-то заклинивает, а когда я нажимаю "дальше..." оно восстанавливается. Но абсолютно не представляю, что там может "заклинивать" и куда копать. Проблема 2: В блоке "Кто на сайте" есть список под названием "Последний посетитель". туда должны записываться все, кто недавно заходил на сайт. Захожу тестовым пользователем на сайт, в списке "на сайте" он появляется. Далее например перемещаюсь по сайту, даже пишу сообщение на форуме, потом выхожу. Из списка "кто на сайте" он пропадает, но не появляется и в списке "Последний посетитель", как будто его и не было. Возможно, обе проблемы имеют и общие корни, но что делать, я по-прежнему не понимаю. error_reporting выставлен в 2039, в админке вывод ошибок включен, ошибок нет. |
||||
|
|
[исход]
![]() |
Цитата:
Цитата:
PHP код:
Цитата:
то что Вы описали не является ошибками, а особенностями реализации Последний раз редактировалось LARK, 09-28-2010 в 01:15 Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском ------------------------------------------------------------------- Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки. |
||||
|
|
Младший участник
|
Похоже на то, что данные об анонимах сбрасываются через 100 секунд, только не после их выхода с сайта, а после моих действий с блоком "подробнее".
А спам-боты конечно лезут, но не остаются на сайте, во всяком случае на столько времени. Да и при закрытом браузере юзера сайт "думал" не 300 секунд (var $disconnect_users = 300), а часа 4. Хм, возникла мысль, возможно я туплю: модуль "Кто сейчас на сайте" был открыт на чтение только админам, возможно только при входе админа могло меняться состояние списков? Хотя сейчас зашел-вышел обычным пользователем - в списке "Последний посетитель" он не появился, как будто и не заходил. Вообще есть чувство, что при открытии страниц где-то должна вызываться функция, которая заставляет данные в "Кто сейчас на сайте" обновляться. И вот она не вызывается, а вызывается только при открытии блока "/modules/whosonline/popup/online.php"... |
||||
|
|
Младший участник
|
Непонятно. У меня проблема все равно существует. Все по нолям. Сервер перезагружал.
Код такой: var $disconnect_anonymous = 100; // 5 min * 60 /** * Time for users when their lost session * * @var Number * @todo settings */ var $disconnect_users = 300; // = 86400; //86400 * 1 day function XoopsUserSession($sessionID='') { global $xoopsConfig,$api; $this->time = $api->current_time; $this->cookie = $xoopsConfig['session_name']; $this->expiretime = 86400*30;//(int)$xoopsConfig['session_expire']; if (!empty($sessionID)) { $this->sessionID = $sessionID; } } //---------------------------------------------------------------------------------------// /** * Creates new session for user * and sets a cookie containing the session id * * @param type $var description * @return type description В чем еще может быть проблема? |
||||
|
|
[исход]
![]() |
Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском ------------------------------------------------------------------- Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки. |
||||
|
|
Младший участник
|
добавил в modules/whosonline/popup/online.php вывод поля time из `runcms_session`,
время присутствующих в таблице анонимусов составляет до 4 часов. Залез в whosonline.php версии 1.2, там в самом начале функции b_whosonline_show стоит вызов функции b_whosonline_update, а в ней в самом начале: PHP код:
Очень хочется тупо вставить в whosonline.php подобный грязный хак для удаления/перевода в оффлайн неактивых юзеров, однако возникает вопрос: не отвалится ли другая часть механизма, которая например предполагает, что взаимодействие идет через sessions.class.php? Не хотелось бы заткнуть 1 багу и получить в других местах еще десяток. Подскажите, как бы это сделать наиболее элегантно? |
||||
|
|
Младший участник
|
так, фикс №1:
в /class/xoopsuser.php есть следующие строки: PHP код:
Не знаю, кто это сюда вписал и почему именно такое поведение решили оставить по умолчанию, но комментируем 1-й запрос и раскомментируем 2-й, и все - теперь юзер при нажатии выход попадает в список "Последний посетитель". фикс №2: длительные копания в коде class/sessions.class.php выявили следующее: функция update() вызывается каждый раз когда залогиненный юзер открывает страницу, из нее вызывается функция gc(), в которой как раз и обновляется состояние таблицы SESSION и соотв. блока "кто на сайте". В этой функции был обнаружен такой магический код: PHP код:
PHP код:
таким образом, теперь остается только вопрос с очисткой онлайн-списка при условии что залогиненных юзеров на сайте нет. Т.е. юзер заходит на сайт, потом закрывает браузер, и по сайту остаются гулять одни анонимусы. При этом как я понимаю список гостей будет постепенно расти, а залогиненный юзер останется очень надолго. Для решения проблемы пока приходит в голову только тупое копирование кода из gc() в storeAnonymous(). |
||||
|
|
Младший участник
|
Нужна помощь касательно архитектуры runcms:
возникла большая проблема по организации кода для анонимусов: хотел вызвать метод gc() из storeAnonymous(), а оказываетcz storeAnonymous() - статический метод, который вызывается как XoopsUserSession::storeAnonymous(); А для gc() обязательно нужен объект этого класса, а для анонимуса объект как я понимаю не создается. И как же мне теперь его вызвать? Все что используется в методе gc это несколько свойств, которые при этом еще и не меняются во время жизни класса. Копипейстить код, убирая отовсюду "this->" - худший вариант, хочется повторно использовать код gc(), вызывая его из статического метода ![]() Пока сделал временный объект прямо внутри storeAnonymous - чисто проверить что это работает: $gccallonly=new XoopsUserSession(); $gccallonly->gc(); unset($gccallonly); Это работает, но хотелось бы найти нормальное решение без создания "одноразовых" объектов. Как это сделать по-человечески? |
||||
|
|
Младший участник
|
и снова глюк:
теперь я хожу по сайту под залогиненным юзером, а он пишет: #3: Гости #0: Пользователи глюк на глюке ![]() |
||||
|
|
Младший участник
|
Цитата:
![]() |
||||
|
|
|
|
|
![]() |
Powered by: vBulletin Version 3.0 Copyright ©2000-2025, Jelsoft Enterprises Ltd. |
Все разделы прочитаны - Руководство форума - Архив - Вверх |