Django - определяет начало и конец сеанса - PullRequest
4 голосов
/ 03 ноября 2010

Я надеюсь, что кто-то может помочь мне с этим.

Я пытаюсь установить счетчик «Количество пользователей в сети» на главной странице моего сайта. Я помню, что в старые добрые времена ASP я имел обыкновение поддерживать счетчик с session.onstart и session.onend.

Как мне это сделать в Django?

Приветствия

Rich

Ответы [ 4 ]

9 голосов
/ 29 декабря 2010

сигналы Джанго очень удобны:

# this is in a models.py file
from django.db.models.signals import pre_delete
from django.contrib.sessions.models import Session

def sessionend_handler(sender, **kwargs):
    # cleanup session (temp) data
    print "session %s ended" % kwargs.get('instance').session_key

pre_delete.connect(sessionend_handler, sender=Session)

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

*/5 * * * * djangouser /usr/bin/python2.5 /home/project/manage.py cleanup

Также я обычно добавляю это в файл manage.py для облегчения поиска пути settings.py:

import sys
import os
BASE_DIR = os.path.split(os.path.abspath(__file__))[0]
sys.path.insert(0, BASE_DIR)

SESSION_EXPIRE_AT_BROWSER_CLOSE работает, но влияет только на куки-файлы клиента, а не на сеансы активных серверов IMHO.

5 голосов
/ 03 ноября 2010
from django.contrib.sessions.models import Session
import datetime
users_online = Session.objects.filter(expire_date__gte = datetime.datetime.now()).count()

Это работает, конечно, только если вы используете хранилище базы данных для сеансов.Что-нибудь более эзотерическое, например memcache, потребует, чтобы вы свернули свои собственные.

1 голос
/ 03 ноября 2010

Если вам нужно отследить активных пользователей, вы можете попробовать http://code.google.com/p/django-tracking/

1 голос
/ 03 ноября 2010

Извините, я не верю, что вы могли бы получить точный подсчет на ASP / IIS. Для сервера просто невозможно определить разницу между тем, что пользователь оставил браузер открытым на сайте, ничего не делая, переходя на другую страницу или полностью закрывая браузер.

Даже если срок действия файла cookie сеанса истекает при закрытии браузера, это все равно ничего не говорит серверу - браузер теперь закрыт, так что же сообщит серверу? Это просто файл cookie на стороне клиента, срок действия которого истек.

Лучшее, что вы можете сделать, это оценить по истечении времени сессии, как предложил Эльф.

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