Сайт сообщества | Клуб пользователей | О проекте

Имя
Пароль
ПравилаРегистрацияСправка
Сообщения за деньПоиск

Вернуться   Клуб пользователей портальной системы RUNCMS > Портал > Настройка и эксплуатация

Ответ
 
Опции темы Опции просмотра
iltmpz вне форума iltmpz
Младший участник


| Цитировать Старый #1 09-27-2010, 23:52

1-й день запустил движок 1.6.2, сразу возникли проблемы.
Периодически смотрю ситуацию не разлогиниваясь.
Проблема 1:
количество гостей на сайте медленно растет, например сейчас:
#31: Гости
#1: Пользователи
(пользователь это я)
31 гость это явный перебор - по моим представлениям, их должно быть не больше 1-2.

Нажимаю ссылку "дальше..." чтобы посмотреть подробный список посетителей - он сначала показывает все 32 разных ip, потом после этого в течение пары минут что-то сбрасывается и остается реальный список - 1 гость и 1 пользователь.

Другая сторона видимо той же проблемы:
зашел тестовым пользователем с другого браузера - он появился в списке "Кто на сайте". Когда вышел, из списка он тоже сразу исчез, а вот когда я зашел повторно и просто закрыл браузер - пользователь висел в списке онлайн еще несколько часов, опять же, пока не стал возиться с окошком "дальше...".

По-видимому в счетчике что-то заклинивает, а когда я нажимаю "дальше..." оно восстанавливается.
Но абсолютно не представляю, что там может "заклинивать" и куда копать.


Проблема 2:
В блоке "Кто на сайте" есть список под названием "Последний посетитель".
туда должны записываться все, кто недавно заходил на сайт.
Захожу тестовым пользователем на сайт, в списке "на сайте" он появляется. Далее например перемещаюсь по сайту, даже пишу сообщение на форуме, потом выхожу. Из списка "кто на сайте" он пропадает, но не появляется и в списке "Последний посетитель", как будто его и не было.

Возможно, обе проблемы имеют и общие корни, но что делать, я по-прежнему не понимаю.

error_reporting выставлен в 2039, в админке вывод ошибок включен, ошибок нет.

  Сообщения: 50 c 02.08.2010 | Репутация: 14
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #2 09-28-2010, 00:38

Цитата:
Сообщение от iltmpz Посмотреть сообщение
Нажимаю ссылку "дальше..." чтобы посмотреть подробный список посетителей - он сначала показывает все 32 разных ip,
это можно объяснить наплывом спам-ботов + поисковики (как правило они лезут с большого количества IP)

Цитата:
Сообщение от iltmpz Посмотреть сообщение
потом после этого в течение пары минут что-то сбрасывается и остается реальный список - 1 гость и 1 пользователь.
Данные об анонимных посетителях хранятся 100 секунд. Можно увеличить - в /class/sessions.class.php изменить строку:

PHP код:
var $disconnect_anonymous 100// 5 min * 60 
Цитата:
Сообщение от iltmpz Посмотреть сообщение
Проблема 2:
В блоке "Кто на сайте" есть список под названием "Последний посетитель".
туда должны записываться все, кто недавно заходил на сайт.
Захожу тестовым пользователем на сайт, в списке "на сайте" он появляется. Далее например перемещаюсь по сайту, даже пишу сообщение на форуме, потом выхожу. Из списка "кто на сайте" он пропадает, но не появляется и в списке "Последний посетитель", как будто его и не было.
Вы разлогинились и информация о сессии пользователя удалилась из базы данных - поэтому и не показывает. Последние посетители - это те кто авторизован, но не открывал страницы сайта более 300 секунд - данные о его сессии сохраняются в базе но ему присваивается статус "офлайн"

Цитата:
Сообщение от iltmpz Посмотреть сообщение
error_reporting выставлен в 2039, в админке вывод ошибок включен, ошибок нет.
то что Вы описали не является ошибками, а особенностями реализации

Последний раз редактировалось LARK, 09-28-2010 в 01:15


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
iltmpz вне форума iltmpz
Младший участник


| Цитировать Старый #3 09-28-2010, 01:22

Похоже на то, что данные об анонимах сбрасываются через 100 секунд, только не после их выхода с сайта, а после моих действий с блоком "подробнее".
А спам-боты конечно лезут, но не остаются на сайте, во всяком случае на столько времени. Да и при закрытом браузере юзера сайт "думал" не 300 секунд (var $disconnect_users = 300), а часа 4.

Хм, возникла мысль, возможно я туплю: модуль "Кто сейчас на сайте" был открыт на чтение только админам, возможно только при входе админа могло меняться состояние списков?
Хотя сейчас зашел-вышел обычным пользователем - в списке "Последний посетитель" он не появился, как будто и не заходил.

Вообще есть чувство, что при открытии страниц где-то должна вызываться функция, которая заставляет данные в "Кто сейчас на сайте" обновляться. И вот она не вызывается, а вызывается только при открытии блока "/modules/whosonline/popup/online.php"...

  Сообщения: 50 c 02.08.2010 | Репутация: 14
Субботин Владим вне форума Субботин Владим
Младший участник

Аватар для Субботин Владим

| Цитировать Старый #4 09-28-2010, 10:47

Непонятно. У меня проблема все равно существует. Все по нолям. Сервер перезагружал.
Код такой:
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


В чем еще может быть проблема?

  Сообщения: 50 c 31.05.2010 | Репутация: 1
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #5 09-28-2010, 11:14

Цитата:
Сообщение от Субботин Владим Посмотреть сообщение
В чем еще может быть проблема?
таблицу session надо починить


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
iltmpz вне форума iltmpz
Младший участник


| Цитировать Старый #6 09-28-2010, 17:56

добавил в modules/whosonline/popup/online.php вывод поля time из `runcms_session`,
время присутствующих в таблице анонимусов составляет до 4 часов.

Залез в whosonline.php версии 1.2, там в самом начале функции b_whosonline_show стоит вызов функции b_whosonline_update, а в ней в самом начале:
PHP код:
$db->query("DELETE FROM ".$db->prefix("lastseen")." WHERE (uid=0 AND time<$anonpast) OR (time<$userpast)");.
$db->query("UPDATE ".$db->prefix("lastseen")." SET online=0 WHERE time<$anonpast");. 
Как я понял, в версии 1.6.2 таблица $db->prefix("lastseen") превратилось в RC_SESS_TBL, однако все DELETE-UPDATE с ней идут через sessions.class.php

Очень хочется тупо вставить в whosonline.php подобный грязный хак для удаления/перевода в оффлайн неактивых юзеров, однако возникает вопрос: не отвалится ли другая часть механизма, которая например предполагает, что взаимодействие идет через sessions.class.php?
Не хотелось бы заткнуть 1 багу и получить в других местах еще десяток. Подскажите, как бы это сделать наиболее элегантно?
Оценка сообщения (репутация)
+4 Michael-XIII положительно:

  Сообщения: 50 c 02.08.2010 | Репутация: 14
iltmpz вне форума iltmpz
Младший участник


| Цитировать Старый #7 09-28-2010, 22:17

так, фикс №1:
в /class/xoopsuser.php есть следующие строки:
PHP код:
   function logout().
   {.
      
$this->db->query("DELETE FROM ".RC_SESS_TBL." WHERE uid=".$this->getVar("uid")."");.
      
//$this->db->query( "UPDATE ".RC_SESS_TBL." SET online=0 WHERE uid=".$this->getVar("uid") ); 
В результате естественно при нажатии кнопки "выход" юзер пропадает.
Не знаю, кто это сюда вписал и почему именно такое поведение решили оставить по умолчанию, но комментируем 1-й запрос и раскомментируем 2-й, и все - теперь юзер при нажатии выход попадает в список "Последний посетитель".

фикс №2:
длительные копания в коде class/sessions.class.php выявили следующее:
функция update() вызывается каждый раз когда залогиненный юзер открывает страницу, из нее вызывается функция gc(), в которой как раз и обновляется состояние таблицы SESSION и соотв. блока "кто на сайте".
В этой функции был обнаружен такой магический код:
PHP код:
      $event_time date('s'$t);.
.
      
/**.
       * @todo: Ugly hack for update on the same cases not on every pages!.
       */
.
      if(
/*$xoopsUser &&*/ $event_time 50). 
Очень интересно, что хотел этим сказать автор (кроме по-видимому экономии на запросах при очень большой нагрузке), тем более оставив непонятный комментарий:
PHP код:
   /**.
    * Clean old sessions records from session tables - Garbage collect.
    *.
    * @author Michael XIII Neradkov.
    * @todo Detect case when need to delete old sessions at this moment - when second shoud be more that 50.
    * @todo time detecting.
    * @return None.
    */

Видимо на то были причины, однако мне о них ничего не известно, а делать с этой проблемой что-то надо, поэтому я просто заменил условие на if(true)

таким образом, теперь остается только вопрос с очисткой онлайн-списка при условии что залогиненных юзеров на сайте нет.
Т.е. юзер заходит на сайт, потом закрывает браузер, и по сайту остаются гулять одни анонимусы. При этом как я понимаю список гостей будет постепенно расти, а залогиненный юзер останется очень надолго.
Для решения проблемы пока приходит в голову только тупое копирование кода из gc() в storeAnonymous().

  Сообщения: 50 c 02.08.2010 | Репутация: 14
iltmpz вне форума iltmpz
Младший участник


| Цитировать Старый #8 09-29-2010, 00:09

Нужна помощь касательно архитектуры runcms:

возникла большая проблема по организации кода для анонимусов:
хотел вызвать метод gc() из storeAnonymous(), а оказываетcz storeAnonymous() - статический метод, который вызывается как XoopsUserSession::storeAnonymous();
А для gc() обязательно нужен объект этого класса, а для анонимуса объект как я понимаю не создается.
И как же мне теперь его вызвать? Все что используется в методе gc это несколько свойств, которые при этом еще и не меняются во время жизни класса.
Копипейстить код, убирая отовсюду "this->" - худший вариант, хочется повторно использовать код gc(), вызывая его из статического метода
Пока сделал временный объект прямо внутри storeAnonymous - чисто проверить что это работает:
$gccallonly=new XoopsUserSession();
$gccallonly->gc();
unset($gccallonly);
Это работает, но хотелось бы найти нормальное решение без создания "одноразовых" объектов.
Как это сделать по-человечески?

  Сообщения: 50 c 02.08.2010 | Репутация: 14
iltmpz вне форума iltmpz
Младший участник


| Цитировать Старый #9 09-29-2010, 12:05

и снова глюк:
теперь я хожу по сайту под залогиненным юзером, а он пишет:
#3: Гости
#0: Пользователи
глюк на глюке

  Сообщения: 50 c 02.08.2010 | Репутация: 14
Субботин Владим вне форума Субботин Владим
Младший участник

Аватар для Субботин Владим

| Цитировать Старый #10 09-29-2010, 19:30

Цитата:
Сообщение от iltmpz Посмотреть сообщение
и снова глюк:
теперь я хожу по сайту под залогиненным юзером, а он пишет:
#3: Гости
#0: Пользователи
глюк на глюке
У меня так же, нем могу справиться....Таблицы чинил, сервер перезагружал, все равно....

  Сообщения: 50 c 31.05.2010 | Репутация: 1
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Рейтинг@Mail.ru Хостинг провайдер Majordomo. Powered by: vBulletin Version 3.0
Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Все разделы прочитаны - Руководство форума - Архив - Вверх
Rambler's Top100
Output: 98.32 Kb. compressed to 90.67 Kb. by saving 7.64 Kb. (7.77%)
Page generated in 0.10185 seconds with 9 queries