Кто сейчас на сайте (PHP+MySQL)

  • Автор темы Андрон из Москв
  • Дата начала

Андрон из Москв

Guest
Кто сейчас на сайте (PHP+MySQL)

У меня такая глобальная задача, пытаюсь написать на PHP скрипт, который будет показывать, кто в данный момент находится на сайте (из зарегистрированных пользователей). Сначала решил использовать отдельную таблицу в БД, при авторизации пользователя нужные данные переносились из основной таблицы в эту временную, и оттуда соответственно выводились на экран. Всё замечательно, но когда пользователь уходит (просто закрывает окно) записи во временной таблице остаются, а как их оттуда потом удалить не понятно.
Есть ещё один вариант, использовать сессии, но как ими управлять на стороне сервера я не знаю. К тому же при большой количестве пользователей это скорее всего сильно нагрузит сам сервер.
Посоветуйте что-нибудь. Как например это работает на других подобных сайтах
 

white phoenix

Новичок
Андрон из Москв
> но когда пользователь уходит (просто закрывает окно)
PHP FAQ: Самые основы. Как работает PHP.
> записи во временной таблице остаются, а как их оттуда потом удалить не понятно.
храни время последнего запроса, и по таймауту определяй еще на сайте ли пользователь.
 

zarus

Хитрожопый макак
ИМХО.
1. Создаем таблицу online с полями, позволяющими идентифицировать пользователя - обычно используют ip
и полем unix - текущая метка времени юникс.

2. Когда пользователь открывает страницу, заносим в таблицу данные о пользователе (и текущую метку времени юникс).

3. В нужном месте сайта:
3.1. Удаляем из таблицы все записи, где unix < time() + некий промежуток неактивности (в секундах).
3.2. Выбираем всех пользователей (или просто подсчитываем общее количество).

У меня:
Период неактивности юзера - 600 = 10 минут. На сервере MySQL для таблицы использую тип HEAP, потому как данные текущего он-лайна хранить не имеет смысла :)

з.ы. Ступил про 3.1а :(
 

Фанат

oncle terrible
Команда форума
Период неактивности юзера - 600 = 10 минут
круто ты о своих пользователях думаешь.
у тебя посетители - сплошь дауны, которые читают по слогам со словарём?
 

SiMM

Новичок
> у тебя посетители - сплошь дауны, которые читают по слогам со словарём?
От контента зависит :)
 

Romashov

экспериментатор
круто ты о своих пользователях думаешь.
у тебя посетители - сплошь дауны, которые читают по слогам со словарём?
http://phpclub.ru/talk/online.php?s=
"Cейчас на форуме" - выводит (по анализу времени) минимум за 20 минут....
 

Фанат

oncle terrible
Команда форума
Это минус разработчикам вБуллетина.
впрочем, подход очевидный.
поскольку, единственная причина, по которой может понадобиться такая цифра - это комплексы автора сайта по поводу длины своей пиписьки.
И, соответственно, прибавляя цифру, он этот комплекс удовлетворяет.

я только одного не пойму - какой смысл возиться с какими-то скриптами? Почему не ввести просто сразу 300 и наслаждаться? Отношение к реальности будет такое же, а кода в 100 раз меньше

-~{}~ 16.12.05 17:51:

то есть, ещё, конечно, есть быдляцкое "я тоже хачу себе такое"
но ставить цифру больше 3 минут - это комплексы, однозначно
 

Андрон из Москв

Guest
Ну нет уж, устанавливать я точно ничего не буду. Я обычно всё сам пишу, так потом проще разобраться.
У меня изначатьно инфа при авторизации юзера добавлялась в таблицу online, при каждом обновлении страницы эта таблица очищалась и если у юзера сессия запущена, инфа о нём снова добавлялась в базу. На практике убедился на скока глючит данный вариант. Вот думаю мож действительно использовать таймаут, тока кто его выбросит из системы если все выдут с сайта, сам то скрипт делать ничего не будет, значит эти записи остануться в таблице
 

Dreammaker

***=Ф=***
Таблица очищалась? Или запись удалялась?
Вариант с таймаутом не отрицает обновления записей.
И никто не должен никого выбрасывать. Запускай с некоторой вероятностью функцию, которая будет очищать старые записи. А если никого нет на сайте, то ничего и не нужно очищать. всё равно таблицей никто польоваться не будет..
 

IF

else
Запускай с некоторой вероятностью функцию
А почему вероятностью?
Те, кто зашёл на страницу выбрасывают из таблицы всех, у кого истёк таймаут. И всё.
 

Фанат

oncle terrible
Команда форума
тока кто его выбросит из системы если все выдут с сайта, сам то скрипт делать ничего не будет, значит эти записи остануться в таблице
НУ И ЧТО?
какая проблема в том, что эти люди останутся в таблице? Они там кому-то мешают?!
 

alpine

Новичок
Может кому будет интересно.
По дефолту в настройках vBulletin стоит время жизни куки 900 секунд, оно настраивается через админку.
 

Андрон из Москв

Guest
Это конечно замечательная идея, насчёт таймаута. Ну полюбдму придётся создавать отдельную таблицу online, и туда уже писать всю инфу. Я боюсь при большом количестве активных юзеров она просто начнёт подвисать.
Кто-то помница что-то про сессии говорил, мол, они используются на всех подобных сайтах, но как это работает не знаю, в инете ничего не нашёл.
Видимо всётаки придётся на таблице остановиться
 

Андрон из Москв

Guest
Автор оригинала: Фанат
и сколько ты планируешь юзеров на сайте?
Никогда не задумывался, как получится
Просто хочется сделать наверняка, чтобы потом голову не ломать
 

Фанат

oncle terrible
Команда форума
ну примерно. назови самое большое число.
мне просто интересно, каковы твои представления об объёмах данных, на которых база "начнёт подвисать".

Кто-то помница что-то про сессии говорил, мол, они используются на всех подобных сайтах,
НА КАКИХ САЙТАХ?
здесь ни о каких сайтах речь не шла

сессии у тебя здесь вообще не при чём. чем ты юзера идентифицируешь - то и используй.
 

Андрон из Москв

Guest
Так про сесси это я где-то в другом форуме вычитал. Кто-то пытался запустить сессию на стороне сервера

На сайте http://4udo.ru/ например есть такой скрит, который показывает онлайн-пользователей. Тут достаточно быстро всё работает. Вот пытаюсь сделать что-то подобное
 

Фанат

oncle terrible
Команда форума
тебе уже 20 раз рассказали, как это сделать.
еще вопросы есть?

про сессии тебе либо дурак писал, либо, что скорее всего, ты слышал звон, да не понял, где он
 
Сверху