Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2011, 20:49   #1
Qaliti
Форумчанин
 
Регистрация: 04.01.2010
Сообщений: 229
По умолчанию Система онлайн пользователей

Не подскажите ли как вобще реализуется такая штука как онлайн/офлайн пользователи? в гугле не нашел...
Qaliti вне форума Ответить с цитированием
Старый 06.08.2011, 21:27   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Когда пользователи заходят на сайт, обычно в БД или файл записывается информация о них и отслеживаются действия за посл. время. Обычно ставится кука. А когда она удаляется, то считается, что пользователь вышел из системы
motorway вне форума Ответить с цитированием
Старый 06.08.2011, 22:28   #3
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Удобно использовать таблицы типа Memory.
Виталий Желтяков вне форума Ответить с цитированием
Старый 06.08.2011, 22:32   #4
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Из сообщения motorway не ясно как вы собираетесь удалять то ли куку, то ли запись в БД и по какому событию ... Проблема в том, что вы не сможете определить, когда пользователь закроет браузер.
Последовательность здесь такая:
1. Постоянно обновляете в базе дату и время текущего действия пользователя
2. Устанавливаете условное время сессии. Т.е. время по истечении которого как вы думаете, если у пользователя не обновлялось время открытия страницы, он покинул сайт - обычно 5-15 минут. Можно задать свою переменную, можно использовать глобальную из php.
3. Ну и затем все просто ... время последней записи в БД + время сессии ... если оно меньше, чем "сейчас" то определяете. то пользователь онлайн (удобно делать прямо в БД например if (last_visit_datetime + INTERVAL 10 MINUTE > NOW()) ... возвращаем флаг 'онлайн') ... в любом случае получится лишь условно определить это значение, с погрешностью, которую вы сами зададите
Cronos20 вне форума Ответить с цитированием
Старый 06.08.2011, 22:35   #5
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Кстати для больших объемов данных и пользователей действительно лучше использовать какие-нибудь быстрые хранилища данных типа Memory
Если собираетесь считать количество пользователей онлайн, то лучше запустить либо crontab, либо создать event в БД, которые допустим раз в минуту будут пересчитывать значения и сохранять в каком-нибудь кэше
Cronos20 вне форума Ответить с цитированием
Старый 07.08.2011, 08:33   #6
Qaliti
Форумчанин
 
Регистрация: 04.01.2010
Сообщений: 229
По умолчанию

До способа Consor20 я уже доходил, и это не красиво, я не видел ни один сайт в котором это было так реализовано. А вот прочитав пост motorway подумал, а что если просто проверять существование сессионной переменной на сервере? У пользователя сессионный идентификатор удаляется при закрытие окна браузера, или через 20 после закрытия ( уже не помню...), и вопрос в том удаляется ли сессионный идентификатор на сервере вместе с этим идентификатором у пользователя?

Ещё слышал что можно на сокетах как то сделать...
Qaliti вне форума Ответить с цитированием
Старый 07.08.2011, 10:08   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

на многих форумах, так же как я заметил у ВКонтакте, используется метод что последнее действие пишется в БД, и потом считаются онлайн в течении N минут с момента последнего действия.

ибо сервер по сути даже и не узнает что клиент вырубил браузер(разве что сайт вечно будет стучатся на сервер и сообщать что он открыт у клиента, но это не очень вариант)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.08.2011, 11:38   #8
Qaliti
Форумчанин
 
Регистрация: 04.01.2010
Сообщений: 229
По умолчанию

Ясно.. а какое время лучше выставить? 2 минуты норм будет?
Qaliti вне форума Ответить с цитированием
Старый 07.08.2011, 14:39   #9
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

2 минуты мало, я вам написал, что лучше 5-15 минут .. здесь все зависит от сайта. Например , чтобы написать что-нибудь на форум или прочитать большой текст может уйти гораздо больше времени
Cronos20 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регистрация пользователей cheef PHP 57 04.05.2010 19:11
Система принятия решения (Экспертная система) daranton Microsoft Office Excel 4 01.05.2010 17:55
Авторизация пользователей Айвенго Microsoft Office Access 2 28.05.2009 10:55