писал для DjangoBB вроде работает)
#middleware.py
class UsersOnline(object):
    def process_request(self, request):
        now = datetime.now()
        delta = now - timedelta(minutes=forum_settings.USER_ONLINE_TIMEOUT)
        users_online = cache.get('users_online', {})
        guests_online = cache.get('guests_online', {})
        if request.user.is_authenticated():
            users_online[request.user.id] = now
        else:
            guest_sid = request.COOKIES.get(global_settings.SESSION_COOKIE_NAME, '')
            guests_online[guest_sid] = now
        for user_id in users_online.keys():
            if users_online[user_id] < delta:
                del users_online[user_id]
        for guest_id in guests_online.keys():
            if guests_online[guest_id] < delta:
                del guests_online[guest_id]
        cache.set('users_online', users_online, 60*60*24)
        cache.set('guests_online', guests_online, 60*60*24)
один момент не совсем DRY.. ну да ладно)
#view.py
#...
users_cached = cache.get('users_online', {})
users_online = users_cached and User.objects.filter(id__in = users_cached.keys()) or []
guests_cached = cache.get('guests_online', {})
guest_count = len(guests_cached)
users_count = len(users_online)
а с тредом на форуме маньяка не согласен - юзать тут базу имхо не стоит