Intellect Board Pro
Расширяемый движок форума с разделами разных типов
Объявление
Вышла версия 3.05 с фотогалереей и поддержкой PostgreSQL и SQLite.
Перейти к скачиванию
Привет, гость!

Присутствующие на форуме участники

Проблема с секцией "Сегодня присутствовали"

Настройки отображения темы Показывать по сообщений с сортировкой .
Выводить , отправленные .
Одна страница
Распечатать
damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
. Редактировалось 1 раз, последний — #1
Добрый день,

Хотелось бы сначала выразить моё почтение автору этого форума. Наш сайт пользуется этим движком уже больше пяти лет. В этом году мы приняли решение обновить версию и переехать на форум 3.02. Мы в полном восторге от новой версии, много полезностей и технических улучшений.



Недавно мы столкнулись с такой проблемой: войдя на форум под своим именем и через некоторое время закрыв вкладку - я буду в списках "сегодня присутствовали". Однако, если я решу выйти со своего аккаунта, и, предположим, зайти в аккаунт второй, то меня в списках сегодня присутствовавших уже не будет. Будет отображён второй аккаунт. 

Если выйду из него, то оба аккаунта не будут в списках сегодня присутствовавших. В старой версии такой проблемы не было, выходя со своего аккаунта, пользователь, который сейчас заходит всегда фиксировался в списках. Скажите, можно ли разрешить эту проблему? Что примечательно, есть зайти в профиль пользователя, то последний визит отображается корректно. 

Буду очень благодарен за возможно оказанную помощь

4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#2
Вообще, ситуация, когда пользователь сидит под несколькими логинами, достаточно редкая (а на многих форумах и запрещенная правилами), поэтому я такой вариант не учитывал. А в IntB 3.x сделано так: для того, чтобы когда пользователь входит на форум под своим именем, он убирался бы из числа гостей, добавлено отслеживание по хешу, который считается из IP-адреса, User-Agent и ещё нескольких заголовков. И когда происходит вход/выход пользователя, то в списке присутствующих обновляются данные для всех, у кого такой же хеш, поэтому данные входа под другими логинами теряются.
Делается это в функции fix_online файла app/app.php, вот в этом куске кода:
      $sql = 'DELETE FROM '.DB_prefix.'online WHERE hash=\''.$this->db->slashes($hash).'\'';
      if ($data['uid'] > AUTH_SYSTEM_USERS)
        $sql.=' OR uid='.intval($data['uid']);
      $this->db->query($sql);

Можно попробовать заменить OR $sql.=' OR uid='.intval($data['uid']); на $sql.=' AND (uid=1 OR uid='.intval($data['uid']).')'; Тогда всё станет работать так же, как было в IntB 2.x.

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
#3
В принципе, у нас это тоже не поощряется. У нас есть один пользователь, который заправляет двумя аккаунтами в рамках исключения (ролевая игра).

На самом деле, проблема глубже. Она касается и единичных аккаунтов, т.е. если любой пользователь решит завершить сессию на форуме и выйдет из него (например, с целью, чтобы кто-то из домочадцев не мог прочитать личную информацию (ЛС)), то пользователь из списков также исчезает и таким образом, это влияет на статистику посещений в целом. Вроде человек был, сообщение на форуме оставил, а вроде как его и не было сегодня, некая такая невидимка.

Исправил вышеупомянутый код, но я так же исчезаю из списков "Сегодня присутствовали", как только нажимаю на кнопку "Выйти"...

4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
. Редактировалось 1 раз, последний — #4
Разобрался. В общем, нужно привести тот кусок кода, о котором шла речь, к такому виду:

      $sql = 'DELETE FROM '.DB_prefix.'online WHERE hash=\''.$this->db->slashes($hash).'\'';
      $sql.=' AND (uid=1 OR uid='.intval($data['uid']).')';
      $this->db->query($sql);

Но этого будет недостаточно. Потребуется ещё изменить PRIMARY KEY таблицы {prefix}_online, чтобы в него входили столбцы hash и uid.
Делается это так
ALTER TABLE `{prefix}_online` DROP PRIMARY KEY, ADD PRIMARY KEY (`hash`,`uid`);
(выполнять в чем-нибудь вроде PhpMyAdmin или подключившись к MySQL из командной строки).
После этого исчезнет проблема и исчезновения пользователей после выхода, и проблема захода под двумя разными логинами. Но при этом пользователь, вошедший на форум, перестанет считаться гостем.
Вместо {prefix} нужно прописать свой префикс, чаще всего это intb или ib.

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
#5
Спасибо, что вообще взялись за этот вопрос. Проблема действительно разрешилась, теперь выходя из форума я остаюсь в списках. НО:


Вставил код в app.php и выполнил SQL запрос в PhpMyAdmin. 

Теперь после выхода из форума, я далее свечусь Онлайн. Не знаю, возможно, что это только на некоторое время, и позже имя исчезнет. В таком случае, в принципе, это не проблема.

В списках теперь имена дублируются почему-то.


4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
. Редактировалось 2 раза, последний — #6
Видимо, заходите с разных устройств или IP-адресов, и получается разное поле hash. Тогда попробуем так:
      $sql = 'DELETE FROM '.DB_prefix.'online WHERE (hash=\''.$this->db->slashes($hash).'\' AND uid=1)';       if (!$this->is_guest()) $sql.=' OR uid='.intval($data['uid']);       $this->db->query($sql);
damisejker написал(а):
Теперь после выхода из форума, я далее свечусь Онлайн.

Всё правильно: там показывается, кто был на форуме последние 10 минут, вне зависимости от того, залогинены они сейчас или нет.

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
#7
Теперь моё имя не дублируется. И не дублируется имя участницы, которая заходила на форум в тот же момент что и я. А вот два пользователя, которые были на форуме утром, почему-то дублируются:



4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#8
Всё правильно: их дублирование прекратится только тогда, когда они снова зайдут (чтобы выполнился SQL-запрос в новой формулировке и удалил лишние записи) или когда сутки закончатся.

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

damisejker
Новичок
Всего сообщений: 21
Зарегистрирован: 24 июл. 2020 г., 19:04
Откуда: Варшава
Рейтинг пользователя: 0

0
#9
Да, действительно. Проблема разрешена.
Спасибо Вам огромное за оказанную поддержку!

Одна страница
Распечатать

У вас нет прав для отправки сообщений в эту тему.