Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Реализация кто онлайн и счетчик посещений

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
teddy
Отправлено: 20 Июля, 2013 - 00:07:12
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




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

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

1. По поводу онлайна: вот думаю каждый раз когда пользователь логинится, делать UPDATE в базе его статус, если 0 то echo "Статус: offline"; если статус не равен 0, то online и записываем в качестве статуса id того кто залогинился(для того, что бы потом если захочу вывести всех пользователей онлайн, можно было получить логин зная id).

Если пользователь нажал на Выход, снова апдейтим статус и присваиваем ему значение 0. Но как быть, если пользователь сам закрыл браузер?

2. По поводу счетчика. Знаю решение глупое, но рабочее )) хотелось бы как нибудь правильнее решить это... Пока додумался только так: if($_SERVER['REMOTE_ADDR']) - апдейтим счетчик в БД, айпи вроде как всегда будет true в условии, при каждом посещении страницы. Но не буду же я на каждой страничке так извращаться или похожими способами...
Просто идею объясните кому не трудно и кто знает.. Буду благодарен )

(Отредактировано автором: 20 Июля, 2013 - 00:07:49)

 
 Top
EuGen Администратор
Отправлено: 20 Июля, 2013 - 00:13:09
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




teddy пишет:
Но как быть, если пользователь сам закрыл браузер?

Ввести таймаут. Считать, что если пользователь ничего не делал, например, 5 минут - то он оффлайн. Соответственно, хранить время последнего действия и обновлять его каждый раз. Оффлайн выставлять тем, у кого дата последнего действия старее, чем текущее время минус интервал таймаута.
teddy пишет:
сколько раз была посещена какая либо страница.

Реализация зависит от бизнес-логики. Как вариант - хранить количество обращений по конкретному URI - как отдельно (по уникальным обращениям, на основе REMOTE_ADDR)- так и общее (неуникальных). Не очень представляю, правда, зачем это нужно (накладных расходов много, польза - сомнительна)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
teddy
Отправлено: 20 Июля, 2013 - 00:22:21
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen пишет:
Ввести таймаут. Считать, что если пользователь ничего не делал, например, 5 минут - то он оффлайн.

Хм.. что то не очень понятно Растерялся Если пользователь ничего не делал 5 минут, но при этом сессия активна - как он может быть оффлайн? Ну тупо смотрит в монитор или забыл что залогинился на сайте. Но вспомнил про это через 6 минут Улыбка Можно конечно я думаю так сделать что то на подобие того, когда в ICQ отходишь на 5 минут, статус получается away, но никак не оффлайн... - Может я не так вас понял?

EuGen пишет:
Не очень представляю, правда, зачем это нужно

счетчик или использование айпи для проверки посещения? Если вы про счетчик, то например увеличивать кол-во просмотров в каждой теме, как например на этом форуме

(Отредактировано автором: 20 Июля, 2013 - 00:22:57)

 
 Top
EuGen Администратор
Отправлено: 20 Июля, 2013 - 00:43:21
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




teddy пишет:
Если пользователь ничего не делал 5 минут, но при этом сессия активна

Выставить таймаут больше, чем время жизни сессии на сервере (по-умолчанию она живёт 1440 секунд). Механизм прост - не считать пользователя онлайн, если он не делал ничего долгое время. Если он не закрыл страницу, но ничего не делает, то всё равно считать оффлайн (ведь с точки зрения системы так и есть, а HTTP-синхронный протокол, и Вы никак не отличите, была ли закрыта страница или же пользователь просто ничего не делает).
Другой вариант - на странице реализовать периодический процесс AJAX-запросов на сервер, чтобы обновлять свой онлайн. Читайте про long-polling. Однако для этого нужны веские причины (думаю, онлайн пользователя на форуме к таковым задачам вряд ли относится).
teddy пишет:
кол-во просмотров в каждой теме

Количество просмотров - это количество неуникальных запросов к странице. Здесь всё просто - при каждом обращении по указанному URI увеличивается счётчик (то есть хранится одно число)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
teddy
Отправлено: 20 Июля, 2013 - 00:50:05
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen
Большое спасибо! Улыбка Хорошо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB