Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как определить находится ли пользователь в данный момент на сайте? (https://javascript.ru/forum/misc/5355-kak-opredelit-nakhoditsya-li-polzovatel-v-dannyjj-moment-na-sajjte.html)

PAMAC 07.10.2009 13:54

Как определить находится ли пользователь в данный момент на сайте?
 
Как определить находится ли пользователь в данный момент на сайте?

micscr 07.10.2009 14:55

В php с помощью механизма сессий
можно или вручную запоминать время захода
и активность.

PAMAC 07.10.2009 15:45

каким образом в php такое возможно?

micscr 07.10.2009 16:17

session_start() вызывается в php скрипте и формирует куку
с идентификатором для пользователя и передает вместе со страницей
(или если пользователь без кук надо вручную ссылки и формы модифицировать)
Пользователь следующий раз заходит с этим идентификатором и php
знает кто вошел.
Но это все относительно - зависит от времени хранения сессии.

Gvozd 07.10.2009 18:42

micscr,
вы какую-то несуразицу несете. и вообще не в тему.конкретизируйте свои мысли
PAMAC,
что вы подразумеваете под "находится"?
если JS запустился на выполнение, то значит пользователь находится на сайте.как бы.
или подразумевается именно то, что он находится на конкретно вашей вкладке, а не на другой сайт смотрит, открыв ваш в фоне?
для этого используются события window.onfocus window.onblur

PAMAC 07.10.2009 19:23

Я хочу понять как сделать следующее: допустим на сайте 100 зарегистрированных пользователей и 69 из них в данный момент времени находятся на сайте, так вот: как сделать так чтобы для любого из 100 пользователей, который находится на сайте, стали видны(т.е. пишем "пользователь в сети") остальные пользователи находящиеся в данный момент времени на сайте...

Gvozd 07.10.2009 22:21

Это делается не средствами JS, а серверными средствами
сохраняете в базу, к примеру, данные о последнем времени захода каждого пользователя, и считаете количество пользователей, бывших на сайте за последнюю минуту к примеру

Riim 08.10.2009 03:57

Gvozd,
а почему сессии здесь не годятся?

Kolyaj 08.10.2009 09:15

А причем здесь сессии?

Gvozd 08.10.2009 09:55

Riim,
именно, пр чем тут они?
сессии не дают ни грамма информации о других пользователях.толь ко переменные конкретного пользователя.и поработать с чужой сессией, нельзя
если вы знаете как в этой ситуации обойтись сессиями, без использования дополнительных файлов, БД, общей памяти

micscr 08.10.2009 10:35

А такой алгоритм не катит?:
1) Заходит человек под именем
2) ему создается сессия
3) запоминаем в БД в таблицу X связку "имя->сессия"

4) заходит "наш" пользователь на сайт
5) по таблице X для всех имен проверяется наличие файла сессии
5.1) если имеется - > выводим что присутствует
5.2) если не имеется - > удаляем из X запись.

x-yuri 08.10.2009 10:37

ну можно посчитать количество файлов сессий *JOKINGLY*

x-yuri 08.10.2009 10:43

Цитата:

Сообщение от micscr
5) по таблице X для всех имен проверяется наличие файла сессии

время жизни сессии не смущает? Кроме того, ты уверен, что файлы сессий сразу удаляются?

micscr 08.10.2009 10:50

Цитата:

Сообщение от x-yuri (Сообщение 32120)
время жизни сессии не смущает? Кроме того, ты уверен, что файлы сессий сразу удаляются?

Так и человек за браузером может заснуть. Что же теперь его нет? Нет есть, только спит.:)
Необходимые издержки, кому надо точно - можно в таблицу X
добавить поле "время последнего захода" и фильтровать в пункте 5) еще по нему.

Riim 08.10.2009 11:43

Цитата:

Сообщение от Kolyaj
А причем здесь сессии?

Не знаю как в php, но в asp.net, во-первых, есть Application (сессия для всех, фактически удобная база данных в памяти компа), во-вторых, события Session_Start и Session_End. С помощью этого все необходимое реализуется в 2 строки кода.

Цитата:

Сообщение от x-yuri
время жизни сессии не смущает?

Надеюсь в php менять-то его можно?

micscr 08.10.2009 11:50

Цитата:

Сообщение от Riim (Сообщение 32129)
Надеюсь в php менять-то его можно?

Можно, но мало - тоже не хорошо

x-yuri 08.10.2009 12:00

в общем, для начала нужно определиться, что значит "пользователь находится на сайте"

PAMAC 11.10.2009 12:27

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

Gvozd 11.10.2009 14:22

сохранять в ответ на каждый запрос пользователя в базе время его запроса, и его SESSID к примеру
на запрос "кто на сайте" выводить тех пользователей, которые посылали запрос в течении последних T секунд
каждые Т секунд с клиента посылать запрос на сервер
При этом вы получите большую точность чем обычно, и повесившийся сервер.
поэтому на практие не стоит применять идею с регулярными запросами.
лучше стоит обойтись без них, а в качестве T выбрать среднее время просмотра страницы на своем сайте, к примеру

PAMAC 11.10.2009 15:05

спасибо


Часовой пояс GMT +3, время: 03:38.