![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
Необходимо вести логин сессий (когда, кто и как долго).
С "когда" и "кто" сложностей - нет, а вот "как долго"? Как реализовать. Необходимо выявлять время удаления сессии (ну и тогда отнимаем время начала сессии и всё) Но как отслеживать время окончания сессии? Ведь пользователь может: 1) Просто закрыть браузер 2) Выйти из сайта через "Выход" 3) Оставить компьютер включенным, и session timeout выбьет его Как отслеживать длительность сессии в первом случае? Нужно использовать какой-нибудь локальный скрипт (к примеру jQuery .unload() метод) и отправлять запрос серверу, что сессия кончается? Но ведь unload сработает на одной вкладке, а если у пользователя в другой вкладе то же открыт этот сайт? То как быть? И как в третьем случае отслеживать? Необходимо знать что сессия уничтожилась сама, по timeout'у. Заранее спасибо за ответы. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Простейший рабочий алгоритм
-- заводим отдельную таблицу в базе для мониторинга активности юзеров. (SESSION_ID,USER, START_TIME, FINISH_TIME) Отдельная таблица, imho, окажется значительно полезней переписывания механизма хранения сессий в базе данных. -- началом посещения считаем время открытия сессии/ Привязываем к этому событию строчку таблицы. -- каждое телодвижение пользователя обновляет поле (FINISH_TIME=time()+10минут) строчки таблицы. -- временем выхода юзера будем считать время FINISH_TIME. -- Если пользователь выходит сознательно нажимая на кнопку Выход - записываем точное время выхода. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Noviy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 29.11.2007 Репутация: нет Всего: нет |
Можете попробовать воспользоваться comet и апдейтить даблицу, которую описал ksnk. Должно быть немного точнее.
|
|||
|
||||
| Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
ksnk,
А 10 минут добавляется с учетом того, что пользователь на последнее действие может затратить примерно 10 минут? Т.е. получается при session timeout = 30 мин, мы получаем максимальную погрешность = 20 минут? Не так ух и плохо) Алгоритм понятен, спасибо. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
У меня session timeout = 10 минут. Так получается оценка сверху, которую несколько приятнее показывать клиентам Хотя, наверное, при длительных сессиях и наличии смысла в этой статистике - разумно делить это время пополам, за ради уменьшения погрешности. Для большей точности можно периодически (по таймауту) скриптом посылать ajax запрос на сервер. Видимо это имел ввиду Noviy, под словом commet. Тогда можно рассчитывать на более точный мониторинг + отсеивание роботов и лузеров с мобилками без JS. Время реакции все равно лучше выбирать подлиннее, для уменьшения нагрузки. С другой стороны какая-то странная и необъяснимая активность на страничке, обычно вызывает резко отрицательную реакцию у посетителя, так что лучше этим заниматься там, где оно действительно нужно - в чат-приложении или игре. Это сообщение отредактировал(а) ksnk - 5.5.2011, 18:39 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
Ну т.е. можно вообще погрешность свести до 1 минуты, если поставить ajax скрипт с отправлением каждую минуту. Но думаю такая нагрузка на базу не стоит этого)
|
|||
|
||||
| Reptor |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1213 Регистрация: 29.12.2004 Репутация: 0 Всего: 0 |
Замените в етом случаи SQL на NoSQL.. например Redis.. и используяте ключ => зна4ение для хранениха юзера и его времени и никакои нагрузки на бд не будет.. а если такая нагрузка то наверняка много юзеров .. можно даже на другои сервер положить ету логику..с тем же Redis или MongoDB. Проблемы нагрузки решаемы |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |