Лучший способ отслеживать текущих подключенных пользователей

можно получить доступ к свойствам объектов с [] вместо .

, Это позволяет Вам, ищут свойство, соответствующее переменной.

obj = {a:"test"};
var propname = "a";
var b = obj[propname];  // "test"

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

obj["class"] = "test";  // class is a reserved word; obj.class would be illegal.
obj["two words"] = "test2"; // using dot operator not possible with the space.

Некоторые люди не знают это и заканчивают тем, что использовали оценка () как это, которое является действительно плохая идея :

var propname = "a";
var a = eval("obj." + propname);

Это более трудно считать, тяжелее для нахождения ошибок в (не может использовать jslint), медленнее для выполнения, и может привести к использованию XSS.

5
задан mlb 1 December 2009 в 14:31
поделиться

6 ответов

Best way is like you do, but time it out via activity. If a given session doesn't access a page within 5 minutes or so, you may consider them no longer active.

8
ответ дан 18 December 2019 в 11:57
поделиться

If you're using ASP.Net membership, take a look at GetNumberOfUsersOnline.

3
ответ дан 18 December 2019 в 11:57
поделиться

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

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

2
ответ дан 18 December 2019 в 11:57
поделиться

Использовать Счетчики производительности :

  • Активные сеансы сервера состояний : number of active user sessions.
2
ответ дан 18 December 2019 в 11:57
поделиться

Расширить сказанное шелковистым в своем ответ - поскольку на самом деле http не имеет состояния, чтобы определить, находится ли пользователь в настоящее время «в сети», вы действительно можете только отслеживать, сколько времени прошло с момента последнего обращения пользователя к вашему сайту, и определить, сколько времени между запросами, по вашему мнению, все еще активным.

Поскольку вы заявили, что это не основано на входе пользователей в систему, это может быть просто показателем того, с скольких различных IP-адресов вы получили запросы за последние 5 минут (или как долго вы считаете тайм-аут «онлайн»).

0
ответ дан 18 December 2019 в 11:57
поделиться

Не используйте для этого сеансы, если вам также не нужны сеансы для чего-то еще; в противном случае это будет излишним.

Предполагая, что установка с одним сервером, сделайте что-то вроде этого:

  1. Для каждого пользователя создайте файл cookie, содержащий уникальный идентификатор
  2. Поддерживайте статическую таблицу уникальных идентификаторов и их время последнего доступа
  3. В HttpModule (или Global.asax) введите новых пользователей в таблицу и обновите их время доступа (используйте соответствующую блокировку для предотвращения состояния гонки)
  4. Периодически, либо из фонового потока, либо в соответствии с запросом пользователя , удалите записи из таблицы, в которых нет t сделал запрос в течение последних N минут. Вы также можете захотеть поддерживать явную функцию «выхода из системы».
  5. Сообщайте количество людей в сети как размер таблицы

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

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

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

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

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

В сценарии с балансировкой нагрузки или в сценарии веб-сада это становится немного сложнее, но вы можете использовать ту же основную идею, просто сохраняя информацию в базе данных, а не в памяти.

0
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: