2014-09-10 3 views
1

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

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

С этой информацией и встроенным в last_login я должен быть в состоянии сделать какую-то функцию, чтобы определить, правильно ли зарегистрирован пользователь/онлайн-право?

Или мне нужно иметь логическое поле под названием «онлайн», которое я могу изменить, когда пользователь входит в систему и выходит из системы?

+0

Возможный дубликат [Как получить список прошедших проверку подлинности пользователей?] (Http://stackoverflow.com/questions/2723052/how-to-get-the-list-of-the-authenticated-users) –

+1

Пользователь может войти в систему и закрыть браузер. Этот пользователь онлайн? Все зависит от того, как вы хотите, чтобы он был близок к реальному времени. – Germano

ответ

3

С помощью только django это будет трудно сделать. Для такой задачи больше подходят асинхронные рамки.

Например, tornado.

Пользователи не будут публично выходить из системы при каждом отключении. Они просто закрывают браузер и все. Вы не можете знать это только с помощью приложения django auth. Он не предназначен для таких задач.

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

Так, чтобы получить реальные онлайн-пользователей, возможные решения:

  1. Каждый пользователь отправит некоторые данные с помощью JavaScript на сервер, например, через каждые 10 секунд. Вы можете получить эти данные на сервере и поместить пользователя в кеш и установить ключ кеша в течение 10 секунд. Поэтому, когда вам нужно знать, кто сейчас в сети, вы проверите свой кеш. Но это нехорошее решение, потому что для этого потребуется много серверных ресурсов.
  2. Используйте асинхронную структуру (tornado) на стороне сервера (вы можете настроить отдельный процесс для точных запросов). И использовать websockets (SockJS - хорошая библиотека для этого на стороне клиента). Это более сложное решение, но это лучше.
+0

Спасибо за ваш ответ! Похоже, это было сложнее, чем я думал. Я все еще в разработке и еще не начал обучение и кеширование. Думаю, мне нужно пойти «жить» для второго решения? – user3199840

+0

@ user3199840, я бы сказал, что это зависит. Если вы не ожидаете большого трафика на вашем приложении, вы можете выбрать 1-е решение, поскольку его быстрее реализовать. Если вы не знакомы с асинхронными фреймворками, вам потребуется некоторое время, чтобы погрузиться в него. – stalk

+0

Хорошо. Может быть, лучше просто пойти со встроенным last_login или каким-то временным временем last_activity, чтобы экономить время и производительность. Я просто хочу, чтобы у пользователей было какое-то чувство, когда другие пользователи были активны. еще раз спасибо – user3199840

2

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

У вас есть два основных варианта:

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

  • Открыть веб-сайт, длинное соединение для голосования или некоторое сердцебиение на сервере. Это то, что делает чат в Facebook. Вам нужно больше, чем просто django, так как для поддержания соединения требуется другой тип серверных ресурсов.

+0

Или, может быть, просто Ajax, который регулярно пингует сервер. –

+0

Спасибо вам за ответ! Мне любопытно. Разве вы не можете решить «ложных» онлайн-пользователей, не имея автоматического выхода из системы? Или это приведет к другим нежелательным проблемам? – user3199840

+2

@ user3199840, Это приведет к нежелательной проблеме, возможно, выйдя из ваших пользователей, когда они будут активны и посреди чего-то :) –

Смежные вопросы